我知道在Python中file.close()
方法没有任何返回值,但我找不到任何关于在某些情况下它是否会抛出异常的信息。如果它也不这样做,那么我想这个问题的第二部分是多余的。
如果确实如此,那么处理file.close()
方法的“正确”方法是什么?在用于打开文件的“with”语句中抛出异常?
是否存在file.close()
文件打开并成功读取后立即失败的情况?
答案 0 :(得分:6)
是的,file.close()
可以抛出IOError
个例外。例如,当文件系统使用配额时,可能会发生这种情况。请参阅C close()
function man page:
不检查
close()
的返回值是一个常见但严重的编程错误。很可能在最后的write(2)
上首次报告先前close()
操作的错误。关闭文件时不检查返回值可能会导致数据无声丢失。使用NFS和磁盘配额尤其可以观察到这种情况。
C close()
函数的非零返回值导致Python引发IOError
异常。
如果您想处理此异常,请将try...except
块放在 with
语句周围:
try:
with open(filename, mode) as fileobj:
# do something with the open file object
except IOError as exc:
# handle the exception
当然,在打开期间也可能抛出IOError
。
答案 1 :(得分:1)
close
可以抛出异常,例如,如果在尝试刷新上次写入时磁盘空间不足,或者拔出USB记忆棒,则该文件已打开。
至于处理此问题的正确方法,这取决于您的应用程序的详细信息。也许您想向用户显示错误消息。也许你想关闭你的程序。也许你想重试你正在做的事情,但是使用不同的文件。无论您选择哪种回复,都可能会在您的计划最适合处理的任何层中使用try
- except
块来实施。
答案 2 :(得分:-1)
您可以使用
file object = open(file_name [, access_mode][, buffering])
然后你检查
file.closed
如果文件被关闭则返回True,否则返回false。