异常

异常这部分的知识我实践的较少,所以自认为理解和掌握的都还不够好(其实每个部分实践的都比较少,掌握的也都不好),由于之前的系列文章中对于异常已经有了一些介绍,这次还是以补充为主。

  • raise语句:我对其的个人理解这个方法就是在使用了try...except代码块之后起到了一个开关的作用,我可以通过是否在except中添加这个方法来起到是否捕获异常的作用。如果我们不使用try。。。except代码块捕获异常,就和使用了try。。。except之后再使用raise()起到的作用是一样的。请见书中示例:
   class MuffledCalculator: 
       muffled = False
       def calc(self, expr): 
           try:
               return eval(expr) 
           except ZeroDivisionError: 
               if self.muffled:
                   print('Division by zero is illegal') 
               else:
                   raise

我们再来看一下具体的使用过程:

>>> calculator = MuffledCalculator()
>>> calculator.calc('10 / 2') 5.0
>>> calculator.calc('10 / 0') # 关闭了抑制功能
Traceback (most recent call last): File "<stdin>", line 1, in ?
File "MuffledCalculator.py", line 6, in calc 7 return eval(expr)
File "<string>", line 0, in ?
ZeroDivisionError: integer division or modulo by zero 

>>> calculator.muffled = True
>>> calculator.calc('10 / 0')
Division by zero is illegal

如上述代码的运行结果可以看出,我们在关闭了抑制功能(即使用了raise),也就捕获了异常,并向上继续传播。

  • 捕获多种异常:在之前的文章中我介绍了捕获一种异常的写法,而捕获多种异常就是同时使用多个except语句即可。或在一个元组中定义多个异常,使用一个except语句将其捕获。

  • finally: 无论try子句中发生了什么异常,都将执行finally子句。

    ps:不知道各位读者是否还记得我在之前的文章中写到我对于if...else代码块和try...except代码块之间的困惑,这本书的作者也给出了他自己的看法:

有时候,可使用条件语句来达成异常处理实现的目标,但这样编写出来的代码可能不那么自 然,可读性也没那么高。另一方面,有些任务使用if/else完成时看似很自然,但实际上使用 try/except来完成要好得多。

一般而言,除非程序存在性能 方面的问题,否则不应过多考虑这样的优化。关键是在很多情况下,相比于使用if/else,使用try/except语句更自然,也更符合Python的风格。因此你应养成尽可能使用try/except语句的习惯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值