IOError 和 OSError 之间的区别?

2024-03-28

我总是对函数是否会引发 IOError 或 OSError(或两者?)感到困惑。这些异常类型背后的原则规则是什么,它们之间有什么区别以及何时引发?

我最初认为 OSError 是针对权限拒绝之类的事情,但是在没有权限的情况下打开文件会引发 IOError。


这两种类型之间几乎没有什么区别。事实上,即使是核心 Python 开发人员也认为没有真正的区别并删除了IOError在 Python 3 中(它现在是OSError). See PEP 3151 - 重新设计操作系统和 IO 异常层次结构 https://www.python.org/dev/peps/pep-3151/#confusing-set-of-os-related-exceptions:

虽然其中一些区别可以通过实现方面的考虑来解释,但它们在更高层次上通常不太符合逻辑。分隔线OSError and IOError例如,通常是模糊的。考虑以下:

>>> os.remove("fff")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: 'fff'
>>> open("fff")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'fff'

是的,这是两种不同的异常类型完全相同的错误消息.

对于你自己的代码,坚持抛出OSError。对于现有函数,请检查文档(它应该详细说明您需要捕获的内容),但您可以安全地捕获这两个函数:

try:
    # ...
except (IOError, OSError):
    # handle error

再次引用PEP:

事实上,很难想象有什么情况可以OSError应该被抓住但没有IOError,或相反。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IOError 和 OSError 之间的区别? 的相关文章

随机推荐