Python3中的异常处理
什么是异常?
即超出程序正常执行流程的某些特殊条件
python标准异常
异常处理
捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
语法:
以下为简单的try…except…else的语法:
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
- 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
- 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。
- 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
except异常捕获
try:
hello
5 / 0
print("helloworld")
except NameError: #捕获异常,并打印
print("in NameError")
Exception可以捕获所有的异常类型
import traceback
print("*************开始*************")
try:
hello
5 / 0
print("明天是个好日子")
except Exception as e:
#Exception可以捕获所有的异常类型,获取异常详细信息 as 别名
print("捕获了所有的异常",e)
print("*************结束*************")
运行结果:
E:\soft\Python\Python36\python.exe E:/soft/pythonProject/exception/except1.py
*************开始*************
捕获了所有的异常 name 'hello' is not defined
*************结束*************
Process finished with exit code 0
捕获所有类型的异常(traceback模块)
如果捕获所有类型的异常,简写(也就是不写Exception),那么需要导入traceback模块,
使用traceback.format_exc()即可看到异常的详细信息
#捕获所有的异常类型
print("*************开始*************")
try:
hello
5 / 0
print("明天是个好日子")
except:
#Exception可以捕获所有的异常类型,但是可以简写,不写Exception默认会捕获所有类型的异常
print("捕获了所有的异常",traceback.format_exc())
print("*************结束*************")
程序运行结果:
E:\soft\Python\Python36\python.exe E:/soft/pythonProject/exception/except2.py
*************开始*************
捕获了所有的异常 Traceback (most recent call last):
File "E:/soft/pythonProject/exception/except2.py", line 8, in <module>
hello
NameError: name 'hello' is not defined
*************结束*************
Process finished with exit code 0
try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
#捕获所有的异常类型
print("*************开始*************")
try:
hello
5 / 0
print("明天是个好日子")
except Exception as e:
#Exception可以捕获所有的异常类型,获取异常详细信息 as 别名
print("捕获了所有的异常",e)
#else子句表示的try里面没有异常的时候才会执行,else一定要放在finally前面
else:
print("in else")
#不管try下面的代码是否有异常,都要执行的语句,finally语句一定要放在最后
finally:
print('in finally')
print("*************结束*************")
raise异常抛弃
程序在运行的过程中可能会出现的异常,我们对着异常进行处理之后(比如记录下来),然后再把这个异常正常的抛出来!
import traceback
#函数的调用栈
def f3():
try:
print("**********f3开始**********")
hello
print("**********f3结束**********")
except:
# 抛出异常
raise
def f2():
try:
print("**********f2开始**********")
f3()
print("**********f2结束**********")
except:
raise #抛出异常
def f1():
try:
print("**********f1开始**********")
f2()
print("**********f1结束**********")
except:
# print("f1捕获了!!!",)
raise
f1()
本文介绍了Python3中的异常处理机制,包括try/except用于捕获和处理异常,以及如何使用else和finally子句。通过示例展示了如何捕获特定异常、所有异常,以及在处理异常后如何使用raise重新抛出异常。同时提到了traceback模块用于获取异常的详细信息。
314

被折叠的 条评论
为什么被折叠?



