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

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

最佳答案

两种类型之间的差异很小。实际上,即使是Python的核心开发人员也同意没有真正的区别,并在Python 3中删除了IOError(现在是OSError的别名)。参见PEP 3151 - Reworking the OS and IO exception hierarchy:



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

对于您自己的代码,请坚持抛出OSError。对于现有功能,请查看文档(其中应详细说明您需要捕获的内容),但是您可以放心地捕获两者:

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

再次引用PEP:

09-30 15:14