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

Bit*_*rex 6 python file-handling python-3.x

我知道在Python中该file.close()方法没有任何返回值,但我找不到任何关于在某些情况下它是否会抛出异常的信息.如果它也没有这样做,那么我想这个问题的第二部分是多余的.

如果确实如此,那么处理该file.close()方法的"正确"方法是什么?在用于打开文件的"with"语句中抛出异常?

是否存在file.close()文件打开并成功读取后立即失败的情况?

Mar*_*ers 7

是的,file.close()可以抛出IOError异常.例如,当文件系统使用配额时,可能会发生这种情况.请参阅C close()函数手册页:

不检查返回值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
Run Code Online (Sandbox Code Playgroud)

当然,IOError也可能在开放期间抛出.