可能重复:
其他目的,最后在异常处理中
我想了解为什么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
语句,然后用continue
或break
中断循环,将再次执行finally
套件。保证在任何情况下都能执行。
finally
子句将始终执行,如果您在代码中遗漏了异常类型,这将非常好。
引用文件:
如果finally存在,它将指定一个"cleanup"处理程序。try子句被执行,包括任何except和else子句。如果任何子句中发生异常而未进行处理,则会临时保存该异常。finally子句被执行。如果存在已保存的异常,则会在finally子句的末尾重新引发该异常。如果finally子句引发另一个异常或执行return或break语句,则保存的异常将丢失。在执行finally子句期间,程序无法使用异常信息。