Python finally的用法

try语句有一个可选finally子句,用于定义在所有情况下都必须执行的finally操作

try:
    raise KeyboardInterrupt
finally:
    print('Goodbye, world!')


Goodbye, world!
KeyboardInterrupt
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>

如果存在finally子句,则该finally子句将作为try语句完成之前的最后一项任务执行。finally无论该try语句是否产生异常,该子句都会运行。

以下几点讨论了发生异常时更复杂的情况:

  • 如果在执行该try子句期间发生异常,则该异常可以由except子句处理。如果该异常未由except子句处理,finally则在执行该子句后将重新引发该异常。
  • 执行exceptor else子句期间可能会发生异常。同样,在finally执行该子句之后,将重新引发异常。
  • 如果try语句到达breakcontinuereturn语句时,finally条款将在<try or else or except的>breakcontinuereturn语句之前执行。
  • 如果finally子句包含一条return语句,则该finally子句的return语句将在<try or else or except的>子句中的return语句之前执行,所以事实上执行了的是finally的return,而不是在<try or else or except>中执行return语句。

案例1.

>>> def bool_return():
...     try:
...         return True
...     finally:
...         return False
...
>>> bool_return()
False

 案例2.

def bool_return():
    try:
        raise Exception
    except Exception:
        return True
    finally:
        return False

print(bool_return())

False

案例3.

>>> def divide(x, y):
...     try:
...         result = x / y
...     except ZeroDivisionError:
...         print("division by zero!")
...     else:
...         print("result is", result)
...     finally:
...         print("executing finally clause")
...
>>> divide(2, 1)
result is 2.0
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in divide
TypeError: unsupported operand type(s) for /: 'str' and 'str'

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python中的finally

    无论try语句中是否抛出异常,finally中的语句一定会被执行。我们来看下面的例子:

    于小勇
  • TensorFlow查看变量的值方法

    定义一个变量,直接输出会输出变量的属性,并不能输出变量值。那么怎么输出变量值呢?请看下面得意

    于小勇
  • Latex常用数学符号

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    于小勇
  • return的值都去哪了?去哪了,“谁伸手了,return的结果就给谁”

    事情是这样,今天的前端零基础课在讲购物车模块,其中的全部商品中的被选中商品的总数和价格,是先要获得所有被选中的单项商品数量和单价,然后发送给接口进行计算的。这其...

    web前端教室
  • python第十四课--排序及自定义函数之自定义函数(案例三)

    return关键字的使用: 1).结束函数 2).将结果返回给函数的调用者/调用处 【注意事项】 1).与return同一作用范围内的后面不要显示书写任何代...

    hankleo
  • python中return如何写

    程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return。

    砸漏
  • Java finally语句到底是在return之前还是之后执行?

    网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正...

    bear_fish
  • 面试被问finally 和 return,到底谁先执行?

    为了解决这个问题,其实我们可以先想想 finally 是被用来干嘛的呢?它是被用来结束一些正常的收尾动作或结束标识。也就是说无论怎么样,finally 都会被最...

    程序猿Damon
  • Java工具集-判断(AssertUtil)

    cwl_java
  • python中return不返回值的问题解析

    return语句用来从一个函数 返回 即跳出函数。我们也可选从函数 返回一个值 。

    砸漏

扫码关注云+社区

领取腾讯云代金券