gpt4 book ai didi

python - IOError 和 OSError 的区别?

转载 作者:IT老高 更新时间:2023-10-28 22:08:18 26 4
gpt4 key购买 nike

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

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

最佳答案

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

While some of these distinctions can be explained by implementation considerations, they are often not very logical at a higher level. The line separating OSError and IOError, for example, is often blurry. Consider the following:

>>> 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:

In fact, it is hard to think of any situation where OSError should be caught but not IOError, or the reverse.

关于python - IOError 和 OSError 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29347790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com