繁体   English   中英

file.close()Python中with语句内的异常处理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM