解锁python异常----下

1.接上一篇<<解锁python异常----上>>


2.捕获对象

我们可以先看一下不捕获异常对象时的报错。这里报出了异常类及异常对象(可以理解为出现异常的原因)

c = 9
c /= 0

# Traceback (most recent call last):
#   File <string>, line 8, in <module>
#     c /= 0
# ZeroDivisionError: division by zero

捕获异常对象,这里需要两个参数,第二个参数将关联到异常对象,从输出可以看出,发生异常并没有中断流程,只是记录下了错误。

c = 9
try:
    c /= 0
except ZeroDivisionError as e:
    print(e)
    print(c)


# division by zero
# 9

3.对不同的异常采取不同的措施

将多个异常类放入同一个元组中

c = 9
try:
    c /= 'a'
except (ZeroDivisionError, TypeError) as e:
    print(e)
    print(c)

# unsupported operand type(s) for /=: 'int' and 'str'


c = 9
try:
    c /= 0
except (ZeroDivisionError, TypeError) as e:
    print(e)

# division by zero

使用多个except子句也可以达到同样的效果

c = 9
try:
    c /= 'a'
except ZeroDivisionError as e:
    print(e)
except TypeError as e:
    print(e)

# unsupported operand type(s) for /=: 'int' and 'str'

 有时候我们处理了一些异常,但仍然可能有遗漏的异常,那么可以只使用try/except语句

c = 9
try:
    c /= 0
except:
    print('Error!!!')

# Error!!!

4.else子句和finally子句

else语句在主try块没有引发异常时执行

c = 9
try:
    c /= 3
except (ZeroDivisionError, TypeError) as e:
    print('Error!!!')
else:
    c += 2
print(c)

# 5.0

finally子句确保代码块无论是否引发异常都将执行

c = 9
try:
    c /= 0
except (ZeroDivisionError, TypeError) as e:
    print('Error!!!')
finally:
    c /= 3
print(c)

# Error!!!
# 3.0

# 这里异常,但还是执行了finally子句中的。

5.异常和函数

异常和函数有着天然的联系。如果不处理函数引发的异常,它将向上传播到调用函数的地方。如果在哪里也未得到处理,异常将继续传播,直至达到主程序(全局作用域)。

 6.异常之蝉

异常处理并不是很复杂。如果你知道代码可能引发某种异常,且不希望出现这种异常时程序终止并显示栈跟踪信息,可添加必要的try/except或try/finally语句来处理它

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值