python - 是否有从 Python 的 OSError 获取信息的跨平台方式?

标签 python exception cross-platform

以一个简单的目录创建操作为例,我可以像这样制作一个 OSError:

(Ubuntu Linux)

>>> import os
>>> os.mkdir('foo')
>>> os.mkdir('foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 17] File exists: 'foo'

现在我可以像这样捕获该错误:

>>> import os
>>> os.mkdir('foo')
>>> try:
...     os.mkdir('foo')
... except OSError, e:
...     print e.args
... 
(17, 'File exists')

是否有一种跨平台的方式可以让我知道 17 或“文件存在”总是意味着相同的东西,以便我可以根据情况采取不同的行动?

(出现了 during another question 。)

最佳答案

错误的 errno 属性在所有平台上都应该相同。您将在 Windows 上获得 WindowsError 异常,但由于这是 OSError 的子类,相同的 "except OSError:" block 将捕获它。 Windows 确实有自己的错误代码,这些代码可以作为 .winerror 访问,但 .errno 属性应该仍然存在,并且可以跨平台使用。

各种错误代码的符号名称可以在 errno 模块中找到。 例如,

import os, errno
try:
    os.mkdir('test')
except OSError, e:
    if e.errno == errno.EEXIST:
        # Do something

您还可以使用 errno.errorcode 执行反向查找(以找出您应该使用的代码)。那就是:

>>> errno.errorcode[17]
'EEXIST'

关于python - 是否有从 Python 的 OSError 获取信息的跨平台方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/273698/

相关文章:

python - 无法运行 zip 文件 : “can' t find '__main__' module”

c++ - QTabWidget 选项卡在垂直方向,但文本在水平方向

java - Akka HelloWorld 未编译 :-(

cross-platform - 跨平台构建环境

php - 跨平台 PHP 注意事项?

python - cx_freeze 生成的 EXE 能否完全反编译回可读的 Python 代码?

python - 满足条件时列表中值的总和

python - 如何创建在图像中仅显示黑色的白色蒙版?

c# - Application Insights - 异常添加信息

Swift 可以放入 `if let` block 吗?