有没有跨平台的方法获取Python的OSError信息?

46 投票
1 回答
15064 浏览
提问于 2025-04-11 20:41

举个简单的例子,当我尝试创建一个文件夹时,可能会遇到一个叫做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或者“文件已存在”总是代表同样的意思,这样我就可以根据不同的情况采取不同的行动呢?

(这个问题是在另一个问题中提到的.)

1 个回答

60

在错误信息中,errno 属性在所有平台上应该是一样的。在Windows系统上,你会遇到 WindowsError 这种异常,但因为它是OSError的一个子类,所以用 except OSError: 这个代码块也能捕捉到它。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'

撰写回答