2013-02-08 40 views
12

我很好奇,如果它被认为是安全的或良好的做法,依靠python的...作为语句。因此,在这个例子中,我忘了明确要求myFile.close()但我可以假设它被称为当Python通过调用对象的方法__exit__()退出with...as声明它是好的做法,依靠python的...作为语句

with open("myfile","w") as myFile: 
    #do something 

:例如打开文件时。它是很好的做法/安全取决于这个,否则会更好地调用file.close()

+0

您是否知道您的示例代码试图从打开的文件中读取? – geoffspear 2013-02-08 18:51:08

+0

哎呀,刚写了个快速的例子,现在就修好了。 – Blaine 2013-02-08 22:55:09

回答

17

这是什么情况下管理者,依靠他们关闭文件给你。即使存在异常,也会调用上下文管理器。

另一种方法是使用finally块来代替:

myFile = open("myfile","w") 
try: 
    # do something with myFile 
finally: 
    myFile.close() 

但由于try:内的块可能会很长,由你到了finally语句的时候,你已经忘记了你设置此为了。

上下文管理器仍然更加强大。由于__exit__方法被告知任何异常,它们也可以充当异常处理程序(忽略异常,引发异常等)。

4

是的,with声明是更好的方法。自Python 2.5以来,该文件对象已配备__enter__()__exit__()方法。 __exit__()方法关闭文件对象。

Python保证它会调用__exit__()方法,但不能保证__exit__()方法会关闭资源,尤其是第三方代码。您需要手动验证。

相关问题