Python“With”命令检测不存在的文件

时间:2018-01-18 02:32:57

标签: python python-3.x file-io exception-handling with-statement

如果我想在python中使用“with”命令打开文件,我如何检测不存在的文件并相应地处理该情况? (例如,如果文件名是由用户输入的,程序需要检查文件名是否存在) 另外,如何使用python“With”语句处理打开文件的失败,例如由于文件损坏导致的权限错误或错误?

1 个答案:

答案 0 :(得分:1)

您可以将整个块包装在try块中并捕获OSError(Python 3中所有I / O和权限相关错误的父级),或者如果您需要绝对确定它来自open,而不是open块之外的with块中的另一个调用,并且在验证成功后立即with

方法1:

try:
    with open(...) as f:
        ...
except OSError:
    ... handle error ...

或仅从open抓住

try:
    f = open(...)
except OSError:
    ... handle error ...
else:
    # When the open succeeds, this is the very next thing executed, so
    # race window for stuff like Ctrl-C interrupting is tiny
    with f:
        ...

如果您只想捕获OSError subclasses的子集,您可以逐个显式地捕获它们,或者为了统一处理,捕获所有已识别错误的tuple,例如,仅捕获非 - 存在文件,是目录或权限相关的错误,同时允许其他错误冒出来,您可以更改:

except OSError:

为:

except (FileNotFoundError, IsADirectoryError, PermissionError):