【问题标题】:Python "With" command detect nonexistent filePython“With”命令检测不存在的文件
【发布时间】:2018-06-27 00:47:23
【问题描述】:
如果我想在 python 中使用“with”命令打开一个文件,我如何检测到一个文件不存在并相应地处理这种情况? (例如,如果文件名是用户输入的,程序需要检查是否存在该文件名的文件)
另外,如何使用python“With”语句处理打开文件失败,例如权限错误或文件损坏导致的错误?
【问题讨论】:
-
你试过什么?请参阅mvce。你不能指望我们为你做你的工作。
-
标签:
python
python-3.x
file-io
exception-handling
with-statement
【解决方案1】:
您可以将整个块包装在 try 块中并捕获 OSError(Python 3 中所有 I/O 和权限相关错误的父级),或者如果您需要绝对确定它来自open,而不是块内的另一个调用,with 块外的open,验证成功后立即with。
方法一:
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):