当“try .. except IOError”未捕获时如何处理 FileNotFoundError?
Posted
技术标签:
【中文标题】当“try .. except IOError”未捕获时如何处理 FileNotFoundError?【英文标题】:How to handle FileNotFoundError when "try .. except IOError" does not catch it? 【发布时间】:2015-04-22 09:38:58 【问题描述】:如何在 python 3 上发现错误?我用谷歌搜索了很多,但似乎没有一个答案有效。文件 open.txt 不存在,所以它应该打印 e.errno。
这是我现在尝试的:
这是我定义的函数
try:
with open(file, 'r') as file:
file = file.read()
return file.encode('UTF-8')
except OSError as e:
print(e.errno)
但是,当我收到此错误时,我没有打印任何内容
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
【问题讨论】:
不相关:不要在相同的上下文中为不同的目的使用相同的名称。请改用text = file.read()
。保持文本为 Unicode,除非绝对必要,否则不要将其编码为字节。
确保运行正确的文件。提供完整的回溯。
Python's "open()" throws different errors for "file not found" - how to handle both exceptions?的可能重复
【参考方案1】:
FileNotFoundError
是OSError
的子类,捕获它或异常本身:
except OSError as e:
操作系统异常已在 Python 3.3 中重新设计; IOError
已合并到 OSError
。请参阅 What's New 文档中的 PEP 3151: Reworking the OS and IO exception hierarchy section。
如需了解更多详情,请通过OS Exceptions section 了解更多信息,请向下滚动查看类层次结构。
也就是说,您的代码应该仍然可以工作,因为 IOError
现在是 OSError
的别名:
>>> IOError
<class 'OSError'>
确保将异常处理程序放置在正确的位置。仔细查看异常的回溯,以确保您没有错过实际引发的位置。最后但同样重要的是,您确实重新启动了 Python 脚本,对吧?
【讨论】:
我更新了我的代码,你发现有什么问题吗?莫非是回线的错? @ThomasW:我无法用该代码重现您的问题;它只是为我打印2
。不,返回线在这里不会造成任何问题。
你是如何解决这个@ThomasW的?我在这里偶尔得到这个github.com/pypa/pip/blame/master/src/pip/_internal/req/… 在linux上使用python的嵌入式版本......
@crizCraig:“偶尔”,还是在特定的 Python 版本上? open()
可以在 Python 3.2 或之前的版本中抛出 OSError
。
@crizCraig:换句话说,那里的代码没有正确地向后兼容 Python 2.x;它应该使用except (IOError, OSError) as e:
。以上是关于当“try .. except IOError”未捕获时如何处理 FileNotFoundError?的主要内容,如果未能解决你的问题,请参考以下文章
didReceiveRemoteNotification:当应用程序处于后台并且未连接到Xcode时未调用fetchCompletionHandler