首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python异常处理及注意事项

异常处理是对可预见的错误进行处理,比如我们在开发web接收前端参数时,可能接收参数类型以及值可能错误,此时我们可以抛出异常,在异常捕获中输出可视化的提示信息给用户。

python的异常捕获以及执行的顺序和其他语言有点不同,有些特点需要我们特别注意,今天我们就来介绍一下python的异常捕获方式及代码执行顺序问题

1. 捕获方式

python的异常捕获方式和其他语言有点不同,大多数编程语言都是 try/catch/finally 的形式,但是python是try/except/finally 的形式。如下所示:

try:

print('逻辑处理代码块')

except KeyError as e:

print('异常逻辑处理,错误信息:{}'.format(e))

finally:

print('不管有没有异常都会执行的代码块')

一般情况下,如果没有异常抛出以及错误,代码会执行的顺序是:try中代码块 =》finally中的代码块

2. 抛出异常时执行的顺序

如果try中抛出了异常或者错误,此时执行的顺序是:try中的代码块 =》except捕获的异常代码块 =》finally中的代码块

其中except是捕获异常的类型,如果try代码块中抛出的异常与except中捕获的异常类型不同时,代码会直接报错。例如下面的案例中,我们抛出了一个ValueError错误,except中却只捕获到KeyError错误,此时代码执行就会报错:

try:

print('逻辑处理代码块')

raise ValueError('测试不同类型的异常捕获')

# raise KeyError('测试')

except KeyError as e:

print('异常逻辑处理,错误信息{}'.format(e))

finally:

print('不管有没有异常都会执行的代码块')

代码执行结果如下所示:

从结果中看出,代码实际执行的顺序是:try代码块=》finally代码块 =》继续抛出未捕获的异常

如果想要捕获多个异常,可以使用如下方式:

try:

print('逻辑处理代码块')

raise ValueError('测试不同类型的异常捕获')

except KeyError as e:

print('key异常逻辑处理,错误信息:{}'.format(e))

except ValueError as e:

print('value异常逻辑处理,错误信息:{}'.format(e))

finally:

print('不管有没有异常都会执行的代码块')

如果多个异常的处理逻辑相同时,可以使用元组的方式定义捕获的异常,具体实现方式如下:

try:

print('逻辑处理代码块')

raise ValueError('测试不同类型的异常捕获')

except (KeyError,ValueError) as e:

print('多个异常逻辑处理相同时的写法,错误信息:{}'.format(e))

finally:

print('不管有没有异常都会执行的代码块')

如果想要捕获所有异常,可以直接捕获 Exception 类型的异常。Exception是所有异常类和错误的基类,所以捕获 Exception 异常就等于捕获了所有异常。具体代码如下:

try:

print('逻辑处理代码块')

raise ValueError('测试不同类型的异常捕获')

except Exception as e:

print('异常逻辑处理,错误信息:{}'.format(e))

finally:

print('不管有没有异常都会执行的代码块')

注意:except 后面的是捕获的异常类型

使用 Exception 捕获异常后,执行结果如下:

逻辑处理代码块

异常逻辑处理,错误信息:测试不同类型的异常捕获

不管有没有异常都会执行的代码块

4. else的作用

异常捕获除了上面的格式之外,还提供了一个 else 。else代码块是没有异常时才执行的代码块,也就是说 try 中的代码块没有异常才会执行 else 中的代码块。这个是python中特有的,其他大多数编程语言中都不存在这个else代码块

try:

print('逻辑处理代码块')

except Exception as e:

print('异常逻辑处理,错误信息:{}'.format(e))

else:

print('没有异常')

finally:

print('不管有没有异常都会执行的代码块')

执行顺序:逻辑处理代码块 =》没有异常=》不管有没有异常都会执行的代码块

5. exit()函数使用后执行的顺序

exit() 函数是终止程序的意思,但是如果我们在try中使用 exit() 终止程序后,它依然会执行 finally 中的代码块。这一点和大多数编程语言都不一样,例如。PHP中使用 exit() 后面的程序就终止执行了,即使使用try/catch/finally捕获最后也不会执行到 finally 中。

例如下方python代码中,使用了exit() 终止程序后,它依然执行了 finally 中的代码:

try:

print('逻辑处理代码块')

exit()

except Exception as e:

print('异常逻辑处理,错误信息:{}'.format(e))

else:

print('没有异常')

finally:

print('不管有没有异常都会执行的代码块')

执行结果:

逻辑处理代码块

不管有没有异常都会执行的代码块

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OrFD0Xubp_1DvPtaMdrK_qyw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券