我总是对函数是否引发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: