打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python中的异常捕获
无论是编程新手还是老手,都会遇到过程序报错,终止执行的情况,对于python的报错信息,可以分为以下两大类
  1. 语法错误,syntax error

  2. 异常, exception

两类报错信息示意如下

# 语法错误>>> 2 x 2 File "<stdin>", line 1 2 x 2 ^SyntaxError: invalid syntax
# 异常# 除数为0的异常>>> 2 / 0Traceback (most recent call last): File "<stdin>", line 1, in <module>ZeroDivisionError: division by zero>>>
# 变量未定义的异常>>> a += 1Traceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'a' is not defined

如果对于基础语法不熟悉,就可能编写出语法错误的代码,这种是编程新手常犯的错误,而异常则是因为考虑的不够周全,比如除数为0的异常,可能初次测试时被除数都不为0,开发者就认为代码是ok的,但是当处理的项目多了,某一天处理了一个除数为0的事务时,代码报错了,此时才意识到代码存在bug, 这也是为什么软件开发不能一步到位,而是不断迭代升级的原因,只有当代码处理的项目足够多的,范围足够广,才能够发现现有代码的不足,从而做出改进。

对于代码中可能的异常进行处理,可以增加程序的健壮性。在python中,通过try..except语句进行异常捕获,基本用法如下

>>> def calc(a, b):... try:... num = a / b... except ZeroDivisionError:... print('[Warning] {} is zero'.format(b))... num = float('inf') if a >= 0 else float('-inf')... return num...>>> calc(2, 1)2.0>>> calc(2, 0)[Warning] 0 is zeroinf

try语句的具体原理如下

  1. 将可能存在异常的语句放置在try代码块中

  2. 用except捕获对应的异常,except语句可以有多条,对应多个不同类型的异常,当try中的某条语句跑出异常之后,程序就会根据异常类型,执行对应的except语句

记住所有的异常类型基本是不可能的,在实际开发中,往往是根据经验,先设定几个可能的异常类型,当遇到超出范围的异常时,在修改代码,捕获对应的异常。
try语句有两个可选的语句
  1. else

  2. finally

else语句只有当try中的代码没有抛出异常时,才会执行; finally语句在try语句正常执行或者异常被处理之后就会执行,示例如下

>>> def calc(a, b):... try:... num = a / b... except ZeroDivisionError:... print('[Warning] {} is zero'.format(b))... num = float('inf') if a >= 0 else float('-inf')... except TypeError:... num = float(a) / float(b)... except:... raise... else:... print('{} / {} == {}'.format(a, b, num))... finally:... print('result is {}'.format(num))... return num...>>># try语句没有抛出异常,else和finally都执行>>> calc(2, 1)2 / 1 == 2.0result is 2.02.0# try语句抛出异常,else语句没有执行,except处理了异常,finally执行>>> calc(2, 0)[Warning] 0 is zeroresult is infinf# try语句抛出异常,else语句没有执行,except处理了异常,finally执行>>> calc('2', 1)result is 2.02.0# try语句抛出异常,但是没有对应的except处理该异常,程序终止,else和finally都没有执行>>> calc(a, 1)Traceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'a' is not defined

在实际开发中,初次编码只需要针对已知的异常类型进行处理即可,后续再根据遇到的报错调整代码。

·end·

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python try语句相关(try/except/else/finally)
7段代码带你玩转Python条件语句
刻意练习:Python基础 -- Task09. else 与 with 语句
Python基础学习笔记(八)异常处理
python try异常处理
基础语法常见问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服