什么';s使用';最后';python中的子句?

什么';s使用';最后';python中的子句?,python,try-finally,Python,Try Finally,可能重复: 我想理解为什么try/except语句中存在finally子句。我理解它的作用,但很明显,如果它值得在语言中占有一席之地,我就错过了一些东西。具体地说,在finally字段中编写子句与在try/except语句之外编写子句有什么区别?无论try套件中发生什么,都保证执行finally套件 使用它清理文件、数据库连接等: try: file = open('frobnaz.txt', 'w') raise ValueError finally: file.cl

可能重复:


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

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

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

try:
    file = open('frobnaz.txt', 'w')
    raise ValueError
finally:
    file.close()
    os.path.remove('frobnaz.txt')
无论异常处理程序(
except
suite)是否捕获异常,或者代码中是否有
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子句期间,程序无法使用异常信息


即使没有捕获到异常,下面的代码最终也会运行,这有利于关闭文件、套接字等。它应该在语言中占有一席之地,因为您不希望程序在出错后继续运行,但显然您希望关闭文件或连接。另请参见@jamylak我知道您想要清理,不清楚的是为什么您不能在
try/except
+1之外执行此操作。很好的答案-示例显示,某些代码可以引发异常,但仍然可以在传播异常之前进行清理。。。正是
的最终目的