Python异常可以由代码手动触发和捕获,也可以根据错误自动触发。
Python异常处理语句有下面五种。
NO | 异常处理语句 | 描述 |
---|---|---|
1 | try/except | 捕捉异常并恢复 |
2 | try/finally | 无论是否发生异常,都执行清理 |
3 | raise | 手动在代码中触发异常 |
4 | assert | 有条件的在代码中触发异常 |
5 | with/as | 环境管理器 |
描述
未对代码做异常捕获处理时,若发生异常,会触发默认的异常处理器,并且打印出错信息,包括触发的异常和堆栈信息。
示例
>>> def myget(obj,index):
return obj[index]
>>> s='梯阅线条'
>>> myget(s,3)
'条'
>>> myget(s,5)
#索引越界,未做异常捕获处理时,触发默认的异常处理器
#即打印标准出错消息,包括触发的异常以及堆栈跟踪信息
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
myget(s,5)
File "<pyshell#2>", line 2, in myget
return obj[index]
IndexError: string index out of range
描述
可以通过try/except捕获异常。
try内语句触发异常时会跳到except并执行except内语句,执行完成后,继续执行后面的语句,程序不会终止。
try内发生异常后面的语句不会被执行。
示例
>>> def myget(obj,index):
return obj[index]
>>> s='梯阅线条'
>>> def nocatcher(msg,i):
print(myget(msg,i))
print('完成')
# 没有异常时正常输出
>>> nocatcher(s,3)
条
完成
# 有异常没捕获时,触发默认异常处理器,程序终止,不执行后面语句,不打印完成
>>> nocatcher(s,5)
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
nocatcher(s,5)
File "<pyshell#26>", line 2, in nocatcher
print(myget(msg,i))
File "<pyshell#2>", line 2, in myget
return obj[index]
IndexError: string index out of range
>>> def hascatcher(msg,i):
try:
print(myget(msg,i))
print('在异常发生后面的语句')
except IndexError as e:
print('出错了:',e)
print('完成')
# 没有异常时正常输出
>>> hascatcher(s,3)
条
在异常发生后面的语句
完成
# 有异常且有捕获时,触发异常处理器,执行except内语句,程序继续执行后面语句,打印完成
# try内发生异常后面的语句不会被执行
>>> hascatcher(s,5)
出错了: string index out of range
完成