2

可能重复:
else 的目的和最后的异常处理

我想了解为什么该finally子句存在于try/except语句中。我理解它的作用,但如果它应该在语言中占有一席之地,我显然会错过一些东西。finally具体来说,在字段中编写子句与在语句之外编写子句有什么区别try/except

4

2 回答 2

14

无论套件中发生什么,finally套件都保证被执行try

使用它来清理文件、数据库连接等:

try:
    file = open('frobnaz.txt', 'w')
    raise ValueError
finally:
    file.close()
    os.path.remove('frobnaz.txt')

无论异常处理程序(except套件)是否捕获异常,或者return您的代码中是否存在语句,这都是正确的:

def foobar():
    try:
        return
    finally:
        print "finally is executed before we return!"

在循环中使用try/语句,然后使用orfinally退出循环,将再次执行该套件。保证在所有情况下都执行。continuebreakfinally

于 2012-07-30T13:49:15.820 回答
2

finally如果您错过了代码中的异常类型,该子句将始终执行。

引用文档

如果 finally 存在,它指定一个“清理”处理程序。执行 try 子句,包括任何 except 和 else 子句。如果任一子句发生异常且未处理,则暂时保存该异常。finally 子句被执行。如果有一个保存的异常,它会在 finally 子句的末尾重新引发。如果 finally 子句引发另一个异常或执行 return 或 break 语句,则保存的异常将丢失。在 finally 子句执行期间,异常信息对程序不可用。

于 2012-07-30T13:50:30.223 回答