How to handle FileNotFoundError when “try .. except IOError” does not catch it?
如何捕获Python3上的错误?我在谷歌上搜索了很多,但所有的答案似乎都不管用。文件open.txt不存在,因此应打印e.errno。
这就是我现在尝试的:
这是我定义的函数
1 2 3 4 5 6
| try:
with open(file, 'r') as file:
file = file.read()
return file.encode('UTF-8')
except OSError as e:
print(e.errno) |
但是,当我收到这个错误时,我不打印任何内容
1
| FileNotFoundError: [Errno 2] No such file or directory: 'test.txt' |
- 无关:不要在同一上下文中为不同的目的使用相同的名称。用text = file.read()代替。保持文本为Unicode,除非绝对必要,否则不要将其编码为字节。
- 确保运行正确的文件。提供完整的追溯。
- python的"open()"可能重复会为"file not found"引发不同的错误-如何处理这两个异常?
FileNotFoundError是OSError的一个子类,捕获它或异常本身:
在python 3.3中对操作系统异常进行了重新处理;IOError已合并到OSError中。请参阅最新文档中的PEP 3151:改写操作系统和IO异常层次结构部分。
有关更多详细信息,请参阅操作系统异常部分,向下滚动查看类层次结构。
也就是说,您的代码仍然可以工作,因为IOError现在是OSError的别名:
1 2
| >>> IOError
<class 'OSError'> |
确保将异常处理程序放置在正确的位置。仔细查看异常的回溯,确保您没有错过它实际被提升的位置。最后但同样重要的是,您重新启动了python脚本,对吗?
- 我更新了我的代码,你看到可能有什么问题吗?可能是回流管的故障吗?
- @托马斯:我不能用那个代码重现你的问题;它只是为我打印2。不,回程线在这里不会引起任何问题。
- 在你的帮助下,我解决了问题,TNX!
- 你是如何解决这个问题的?我偶尔会在github.com/pypa/pip/blame/master/src/pip/_internal/req/&hellip;上看到这个,它使用的是Linux上的嵌入式版本python……
- @crizcraig:"偶尔",还是在特定的python版本上?open()可以在python 3.2或更早版本中抛出OSError。
- @crizcraig:换句话说,这里的代码没有与python 2.x正确向后兼容;它应该使用except (IOError, OSError) as e:。
- 我正在通过python github.com/deepdrive/deepdrive-s i m/blob/&hellip;@martijnpieers调用pip安装,这个引擎中只有我们已经明确嵌入了github.com/deepdrive/unrealenginepython的解释器,所以我很确定它始终是python 3.6。我偶尔会说,因为它在几次跑步后就开始工作了。还不确定它是随机的还是确定性的。
- @crizcraig:"相当确定"与"绝对确定"不同,您链接到的页面也嵌入了python 2.7。你有什么消息吗?