try-except语句可以用来捕获异常,在程序发生异常的时候能够捕获并异常,不至于让程序发生终止并退出。本文主要以一个except块、多个except块以及try-except语句嵌套的为例。
其try-except基本语法如下:
文中所用到的异常类型可参考下面博客:【Python】Python全部异常类型(Error)总结_python error-CSDN博客
在try代码块中可能存在引发异常的语句,如果发生异常则跳到except代码块中执行。
示例代码:
a=input("请输入数字1:")
n=input("请输入数字2:")
result=int(n)/int(a)
print(result)
print('{0}/{1}={2}'.format(n,a,result))
#由于0不能做除数,所以当a=0时报错
由于0不能做除数,所以输入a=0时报错。
当报错不想让程序停止,我们可以使用try-except语句来对异常进行捕获,代码如下:
a=input("请输入数字1:")
n=input("请输入数字2:")
try:
result=int(n) / int(a)
print(result)
print('{0}/{1}={2}'.format(n,a,result))
except Exception as e: #Exception表示通用异常
print('不能除以0,异常{0}'.format(e)) #对异常进行捕获
在输入a=0后,发生异常,并且显示异常是不能除以0。
多个except代码块
多条语句可能会引发多种不同的异常,对每一种异常都会采取不同的处理方式。针对这种情况可以在一个try后面跟多个except代码块,语法结构如下:
示例代码:
a=input("请输入数字1:")
n=input("请输入数字2:")
try:
result=int(n) / int(a)
print(result)
print('{0}/{1}={2}'.format(n,a,result))
except (ZeroDivisionError,ValueError) as e:
print('不能除以0,异常{0}'.format(e))
try-except语句嵌套
上述代码可以也使用try-except语句嵌套,如下所示:
a=input("请输入数字1:")
n=input("请输入数字2:")
try:
result=int(n) / int(a)
print(result)
print('{0}/{1}={2}'.format(n,a,result))
except ZeroDivisionError as e1:
print('不能除以0,异常{0}'.format(e1))
except ValueError as e2:
print('输入的是无效数字,异常{0}'.format(e2))
可获得相同效果:
有时在使用try-except语句中会占用一些资源,例如打开的文件、网络链接、打开的数据及数据结果集都会占用计算机资源,为了确保这些资源能够被释放,可以使用finally代码块。即在try-except语句后面加一个finally代码块,语法结构如下:
无论try代码块还是except代码块结束,都会执行finally代码块,示例代码如下:
a=input("请输入数字1:")
n=input("请输入数字2:")
try:
result=int(n) / int(a)
print(result)
print('{0}/{1}={2}'.format(n,a,result))
except ZeroDivisionError as e1:
print('不能除以0,异常{0}'.format(e1))
except ValueError as e2:
print('输入的是无效数字,异常{0}'.format(e2))
finally:
print("资源释放...")
运行结果如下: