有没有一种跨平台的方式来从Python的OSError获取信息?

Asked
Viewd13091

42

例如,在一个简单的目录创建操作中,我可以使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 个答案

57

错误的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'