Python中的try-except语句以及finally代码块释放资源

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("资源释放...")

运行结果如下: 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Roy Teng

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

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

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

打赏作者

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

抵扣说明:

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

余额充值