什么';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之外执行此操作。很好的答案-示例显示,某些代码可以引发异常,但仍然可以在传播异常之前进行清理。。。正是的最终目的
。