在python中使用'finally'子句的范围是什么?



可能重复:
其他目的,最后在异常处理中

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

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

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

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/finally语句,然后用continuebreak中断循环,将再次执行finally套件。保证在任何情况下都能执行。

finally子句将始终执行,如果您在代码中遗漏了异常类型,这将非常好。

引用文件:

如果finally存在,它将指定一个"cleanup"处理程序。try子句被执行,包括任何except和else子句。如果任何子句中发生异常而未进行处理,则会临时保存该异常。finally子句被执行。如果存在已保存的异常,则会在finally子句的末尾重新引发该异常。如果finally子句引发另一个异常或执行return或break语句,则保存的异常将丢失。在执行finally子句期间,程序无法使用异常信息。

最新更新