44

例如,在一个简单的目录创建操作中,我可以像这样创建一个 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 或“文件存在”总是意味着同一件事,以便我可以根据情况采取不同的行动?

(这是在另一个问题中出现的。)

4

1 回答 1

60

错误的errno属性在所有平台上都应该相同。您将WindowsError在 Windows 上遇到异常,但由于这是 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'
于 2008-11-07T22:39:59.947 回答