异常处理
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在 Python 无法正常处理程序时就会发生一个异常。
捕捉异常可以使用 try/except
语句。
try
语句的工作原理如下:
- 首先,执行
try
子句 (try
和except
关键字之间的(多行)语句)。 - 如果没有异常发生,则跳过
except
子句并完成try
语句的执行。 - 如果在执行
try
子句时发生了异常,则跳过该子句中剩下的部分。然后,如果异常的类型和except
关键字后面的异常匹配,则执行except
子句 ,然后继续执行try
语句之后的代码。 - 如果发生的异常和
except
子句中指定的异常不匹配,则将其传递到外部的try
语句中;如果没有找到处理程序,则它是一个 未处理异常,执行将停止并显示如下所示的消息。
例子:
>>> try:
x = int(input('请输入:'))
except ValueError:
print('abcde') ### ValueError异常,执行该部分
else:
print('12345') ### 无异常,则跳过 except 部分而执行该 else 部分
请输入:5
12345
请输入:a
abcde
>>> try:
x = int(input('请输入:'))
except NameError:
print('abcde')
else:
print('12345')
请输入:a
Traceback (most recent call last):
File "<pyshell#29>", line 2, in <module>
x = int(input())
ValueError: invalid literal for int() with base 10: 'a'
不带任何异常类型
你可以不带任何异常类型使用except,如下实例:
try:
正常的操作
except:
发生异常,执行这块代码
else:
如果没有异常执行这块代码`
以上方式 try-except
语句捕获所有发生的异常。但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常。
带多种异常类型
你也可以使用相同的 except
语句来处理多个异常信息,如下所示:
try:
正常的操作
except(Exception1[, Exception2[,...ExceptionN]]):
发生以上多个异常中的一个,执行这块代码
else:
如果没有异常执行这块代码
try-finally
语句
try-finally
语句无论是否发生异常都将执行最后的代码。
try:
<语句>
finally:
<语句> #退出try时总会执行
raise
例子:
>>> try:
x = int(input('请输入:'))
except ValueError:
print('abcde')
else:
print('12345')
finally:
print('hello world')
请输入:a
abcde
hello world
>>> try:
x = int(input('请输入:'))
except NameError:
print('abcde')
else:
print('12345')
finally:
print('hello world')
请输入:a
hello world
Traceback (most recent call last):
File "<pyshell#38>", line 2, in <module>
x = int(input('请输入:'))
ValueError: invalid literal for int() with base 10: 'a'
raise
语句
raise
语句允许用户自行强制发生指定的异常。
例如:
>>> raise NameError('Hello Wrong World')
Traceback (most recent call last):
File "<pyshell#41>", line 1, in <module>
raise NameError('Hello Wrong World')
NameError: Hello Wrong World