可能重复:
else 的目的和最后的异常处理
我想了解为什么该finally
子句存在于try/except
语句中。我理解它的作用,但如果它应该在语言中占有一席之地,我显然会错过一些东西。finally
具体来说,在字段中编写子句与在语句之外编写子句有什么区别try/except
?
可能重复:
else 的目的和最后的异常处理
我想了解为什么该finally
子句存在于try/except
语句中。我理解它的作用,但如果它应该在语言中占有一席之地,我显然会错过一些东西。finally
具体来说,在字段中编写子句与在语句之外编写子句有什么区别try/except
?
无论套件中发生什么,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
退出循环,将再次执行该套件。保证在所有情况下都执行。continue
break
finally
finally
如果您错过了代码中的异常类型,该子句将始终执行。
引用文档:
如果 finally 存在,它指定一个“清理”处理程序。执行 try 子句,包括任何 except 和 else 子句。如果任一子句发生异常且未处理,则暂时保存该异常。finally 子句被执行。如果有一个保存的异常,它会在 finally 子句的末尾重新引发。如果 finally 子句引发另一个异常或执行 return 或 break 语句,则保存的异常将丢失。在 finally 子句执行期间,异常信息对程序不可用。