python - 依赖 python 的 with...as 语句是一种好习惯吗

标签 python with-statement contextmanager

我很好奇依赖 python 的 with...as 语句是否被认为是安全的或良好的做法。例如打开文件时:

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

所以在这个例子中我忽略了显式调用 myFile.close() 但是我可以假设它是在 python 通过调用退出 with...as 语句时调用的对象 __exit__() 方法。依赖这个是好的做法/安全的还是始终显式调用 file.close()

更好

最佳答案

这就是上下文管理器的作用,依靠它们为您关闭文件。即使出现异常,也会调用上下文管理器。

另一种方法是使用 finally block :

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

但是因为 try: 中的 block 可能很长,所以当您到达 finally 语句时,您已经忘记了设置它的目的。

上下文管理器更强大。因为 __exit__ 方法被告知任何异常,它们也可以充当异常处理程序(忽略异常、引发另一个异常等)。

关于python - 依赖 python 的 with...as 语句是一种好习惯吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14776853/

相关文章:

python - 由 Flask sqlalchemy 模型中的关系字段创建的数据库字段

python - 返回 Python 中最低有效位的索引

python - 如何在上下文管理器中安全地处理异常

python - Django 管理表单可以使用跨站请求伪造 (CSRF) 进行操作

python - 根据条件使用不同的上下文管理器

文件或无的 Python 上下文

Python win32com.client 和 "with"语句

python - 在 contextmanager 中使用 yield 两次

为类拥有的对象组合上下文管理器的 Pythonic 方法

Python 公共(public)假期在工作日