当Python检测到一个错误时,解释器就无法继续执行了,而且出现了一些错误的提示,这就是所谓的异常。
异常处理
- 在错误易发代码段前加入try异常处理。
try:
print(num) #变量num未定义,异常类型为‘NameError’。
print('step_1')
except NameError:
print('捕获异常后的补偿处理')
print('step_2')
>>>
捕获异常后的处理
-----2-----
由于num处出现异常,故未执行‘-----1-----’,取而代之的是替补方案‘捕获异常后的处理’,随后继续运行“-----2-----”。
多异常处理
try:
#open('xxx.txt')
#print(num)
print('-----1-----')
except (FileNotFoundError,NameError):
print('变量或文件不存在')
except Exception as ret:
print('发生了其余类型的异常')
print(ret) #返回异常原因
else:
print('无异常时执行该内容')
finally:
print('无论有无异常均执行')
print('-----2-----')
异常传递
- 里层嵌套函数出现异常时,异常会一级一级向上传递,直到传递到有异常处理的嵌套层。
- 如果嵌套异常传递结束后,仍未发现try异常处理,则交由Python解释器做报错处理。
自定义异常
通过定义一个继承Python底层异常处理父类的子类对象来实现异常处理的自定义。
class Self_define(Exception):
def __init__(self,lenth,atleast):
self.lenth = lenth
self.atleast = atleast
def main():
try:
s = input('请输入:')
if len(s) < 3:
#raise手动触发自定义异常
raise Self_define(len(s),3)
except Self_define as result: #result变量与异常绑定
print('Self_define:输入的的长度是%d,长度至少应是%d'%(result.lenth,result.atleast))
else:
print('无异常发生')
main()
>>>
请输入:23
Self_define:输入的的长度是2,长度至少应是3