Python try finally语句的用法

582次阅读
没有评论
Python

Python try finally语句的用法

前面介绍了 except 分支和 else 分支,它们分别在有异常抛出和没有异常抛出时被执行。接下来介绍另一个分支,该分支在任何情况下都会被执行,而且是在最后被执行,这就是 finially 分支。

下面是 finally 分支的一个例子。

>>> def finally_demo(a, b):            # 定义一个包含异常处理的函数
…     try:
…             a = a / b
…     except ZeroDivisionError, except_obj:   # 捕捉被0除的异常
…             print("Exception Message = %s" % except_obj.message)
…     else:                          # 没有异常时会触发的分支
…             print("No Exception is Got")
…     finally:                       # 不论有无异常都被触发的分支
…             print("Finnally Branch is Running")

>>> finally_demo(12, 2)
No Exception is Got                    # finally分支的输出,第9行的输出
Finnally Branch is Running
>>> finally_demo(12, 0)               
Exception Message = integer division or modulo by zero  # 第5行的输出
Finnally Branch is Running             # 第9行的输出

即使发生了异常但是没有被捕捉到,该分支还是会被执行。如下面的例子:

>>> def finally_demo(a, b):            # 定义函数
…     try:                           # 异常捕捉区
…             a = a / b                              
…     except EOFError, except_obj:   # 如果出现文件,则结束异常
…             print("Exception Message = %s" % except_obj.message)
…     else:                          # 如果没有出现该异常
…             print("No Exception is Got")
…     finally:                       # 不论是否出现异常,都要执行的分支
…             print("Finnally Branch is Running")
…                                    # 函数定义结束
>>> finally_demo(12, 4)                # 没有出现异常
No Exception is Got                    # else分支会执行
Finnally Branch is Running             # finally分支会执行
>>> finally_demo(12, 0)                # 抛出异常,但是没有被捕捉到
Finnally Branch is Running             # finally分支仍然会被执行
Traceback (most recent call last):     # 异常信息
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in finally_demo  # 没有被捕捉的异常
ZeroDivisionError: integer division or modulo by zero

而且在正常分支中包含 return 语句并且没有引发异常,finnally 分支也会被执行。这和 else 分支是不同的,下面就是这样的一个例子。

>>> def div(a, b):                  # 定义一个除法函数
…     try:                        # 正常分支
…         c = a / b          
…         return c
…     except ZeroDivisionError as ex_obj:
…         print("Got Exception: %s" % ex_obj)
…     finally:
…         print(u"finnally分支在执行")
…                      # 函数定义结束
>>> div(8, 2)
finnally分支在执行        # finally分支的输出
4                        # 结果,即返回值

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:[db:作者]2022-09-19发表,共计2031字。
新手QQ群:570568346,欢迎进群讨论 Python51学习