[英]file.close() exception handling inside a with statement in Python
我知道在Python中file.close()
方法没有任何返回值,但我找不到任何关于在某些情况下它是否会引发异常的信息。 如果它也没有这样做,那么我想这个问题的第二部分是多余的。
如果确实如此,那么处理file.close()
方法的“正确”方法是什么?在用于打开文件的“with”语句中抛出异常?
是否存在file.close()
在文件打开并成功读取后立即失败的情况?
是的, file.close()
可以抛出IOError
异常。 例如,当文件系统使用配额时,可能会发生这种情况。 请参阅C close()
函数手册页 :
不检查
close()
的返回值是一个常见但严重的编程错误。 很可能首先在最后的close()
报告先前write(2)
操作的错误。 关闭文件时不检查返回值可能会导致数据无声丢失。 使用NFS和磁盘配额尤其可以观察到这种情况。
C close()
函数的非零返回值导致Python IOError
异常。
如果你想处理这个异常,请在with
语句周围加一个try...except
块:
try:
with open(filename, mode) as fileobj:
# do something with the open file object
except IOError as exc:
# handle the exception
当然, IOError
也可能在打开期间被抛出。
close
可以抛出异常,例如,如果在尝试刷新上次写入时磁盘空间不足,或者如果拔出USB记忆棒,则文件已打开。
至于处理这个问题的正确方法,这取决于你的应用程序的细节。 也许您想向用户显示错误消息。 也许你想关闭你的程序。 也许你想重试你正在做的事情,但是使用不同的文件。 无论你选择什么样的响应,它都可能是通过try
实现的 - except
程序中任何层最适合处理它的块。
您可以使用
file object = open(file_name [, access_mode][, buffering])
然后你检查一下
file.closed
如果文件关闭则返回True,否则返回false。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.