赞
踩
按要求自定义MyError异常类,使得当MyError异常发生时,执行评测代码能够输出如下信息。
测试输入:
4
预期输出:
这是我定义的第4个异常
评测代码结构大致如下
try:
raise MyError(4)
except MyError as e:
print(e)
因为构造函数有数字,所以__init__
在写的时候记得带上数字。
因为有print
,所以注意修改字符串化函数__str__
# -*- coding: utf-8 -*-
class MyError(Exception):
#********begin*********#
def __init__(self,val):
self.val = val
def __str__(self):
return "这是我定义的第%d个异常"%(self.val)
#******** end*********#
按照要求补全右侧代码。使得实现以下功能:
当测试输入的字符串长度大于3时抛出MyError异常,并输出长度过长,否则输出长度合适。
并且不论是否抛出异常,执行完成后都要输出执行完毕。
测试输入:
abc
预期输出:
长度合适
执行完毕
class MyError(Exception): def __init__(self): pass def __str__(self): return '长度过长,大于3' def TestLength(x): x=len(x) #*********begin*********# try: if x > 3: raise MyError() # raise Myerror() # name 'Myerror' is not defined except Exception as e: print(e) else: print("长度合适") finally: print("执行完毕") #********* end*********#
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示在 Begin-End 之间补充该程序代码。如果发生了异常,打印异常信息,打印格式如下(冒号为中文冒号):
错误信息为:xxxxxxx
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
可在右侧 “测试结果”区查看具体的测试集详情。
测试输入:
f.read()
预期输出:
文件已关闭
测试输入:
f.write()
预期输出:
错误信息为write() takes exactly one argument (0 given)
文件已关闭
# 请在下面的 Begin-End 之间按照注释中给出的提示编写正确的代码 ########## Begin ########## f = open("src/step1/test.txt","r") try: eval(input()) # eval用来执行一个字符串命令,并返回一个值 # 无except : # Traceback (most recent call last): # File "src/step1/error.py", line 5, in <module> # eval(input()) # eval用来执行一个字符串命令,并返回一个值 # File "<string>", line 1, in <module> # TypeError: write() takes exactly one argument (0 given) # except : 错误信息为文件已关闭 except Exception as e: print("错误信息为",end = "") print(e,end = "\n") finally: f.close() # 补充代码使普通的 open 语句具有 with open 的功能 ########## End ########## if f.closed: print("文件已关闭") else: print("文件未关闭")
def test1(): try: 1+1 except Exception as e: pass else: a = 5/0 finally: pass def test2(): try: 1+1 except Exception as e: pass else: pass finally: a = 5/0 pass if __name__ =="__main__": # test1() test2()
函数1报错:
Traceback (most recent call last):
File “try&else.py”, line 24, in
test1()
File “try&else.py”, line 8, in test1
a = 5/0
ZeroDivisionError: division by zero
函数2报错:
Traceback (most recent call last):
File “try&else.py”, line 25, in
test2()
File “try&else.py”, line 20, in test2
a = 5/0
ZeroDivisionError: division by zero
当然是不行的。
else块:try块正常执行后,才会执行该语句。
finally块:不管有没有异常,都会执行的语句。
换而言之,他们就是普通的代码块,只不过写在了 try-catch 里面。
def test11(): print('输出:') try : a = 5.0 / 0.0 print('try',end = "-->") except : print('except',end = "-->") else : print('else',end = "-->") finally : print('finally') def test12(): print('输出:') try : a = 5.0 / 1.0 print('try',end = "-->") except : print('except',end = "-->") else : print('else',end = "-->") finally : print('finally') def test21(): print('输出:') try : a = 5.0 / 0.0 print('try',end = "-->") return 0 except : print('except',end = "-->") return 1 else : print('else',end = "-->") return 2 finally : print('finally') return 3 def test22(): print('输出:') try : a = 5.0 / 0.0 print('try',end = "-->") return 0 except : print('except',end = "-->") return 1 else : print('else',end = "-->") return 2 finally : print('finally') # return 3 def test23(): print('输出:') try : a = 5.0 / 1.0 print('try',end = "-->") return 0 except : print('except',end = "-->") return 1 else : print('else',end = "-->") return 2 finally : print('finally') return 3 def test24(): print('输出:') try : a = 5.0 / 1.0 print('try',end = "-->") return 0 except : print('except',end = "-->") return 1 else : print('else',end = "-->") return 2 finally : print('finally') # return 3 def test25(): print('输出:') try : a = 5.0 / 1.0 print('try',end = "-->") # return 0 except : print('except',end = "-->") return 1 else : print('else',end = "-->") return 2 finally : print('finally') return 3 def test26(): print('输出:') try : a = 5.0 / 1.0 print('try',end = "-->") # return 0 except : print('except',end = "-->") return 1 else : print('else',end = "-->") return 2 finally : print('finally') # return 3 if __name__ == "__main__": print("test11:",test11()) print("test12:",test12()) print("test21:",test21()) print("test22:",test22()) print("test23:",test23()) print("test24:",test24()) print("test25:",test25()) print("test26:",test26())
在return实验中,可以看出来谁的优先级是最高的。
无论在何种情况下,finally 的return值一定是最先的 —— 因为finally一定能保证执行,也就能保证有返回值。
在报错的情况下,except的的return优先级要高于try,但都是在finally后面的 —— except就是专门应对特殊情况的,try返回的东西很可能造成程序异常。
而在不报错的情况下,try块内的return优先级要高于else —— else可以理解为跟在 try 后面,没有try捕获作用的块。
https://zhuanlan.zhihu.com/p/360807803
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。