理解python中with语句的异常处理



我试图理解python中的with语句,但我不明白它是如何处理异常的。

例如,我们有这样的代码
file = open('file-path', 'w') 
try: 
file.write('Lorem ipsum') 
finally: 
file.close() 

然后是这个代码

with open('file_path', 'w') as file:
file.write('hello world !')

这里何时调用file.close()?从这个问题我认为,因为python有entryexit函数(和退出函数是由自己调用时file.write();结束了吗?),但是我们要如何做异常处理(catch)的声明,特别是?

另外,如果我们不写finally在第一个代码段,它不会自己关闭连接吗?

file = open('file-path', 'w') 
try: 
file.write('Lorem ipsum') 

当我们使用with语句时,无论我们是由于异常而离开with块,还是我们刚刚正常执行了包含的代码,__exit__都会被调用。

如果包含在with块中的任何代码导致异常,它将导致__exit__运行,然后将异常传播到周围的try/except块。

下面的代码片段(为了语法正确添加了finally: pass):

file = open('file-path', 'w') 
try: 
file.write('Lorem ipsum')
finally:
pass

将永远不会导致文件被关闭,因此它将在程序的整个运行过程中保持打开状态(假设没有在其他任何地方调用close)。

最新更新