Python3中的异常处理

本文介绍了Python3中的异常处理机制,包括try/except用于捕获和处理异常,以及如何使用else和finally子句。通过示例展示了如何捕获特定异常、所有异常,以及在处理异常后如何使用raise重新抛出异常。同时提到了traceback模块用于获取异常的详细信息。

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

patmos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值