有没有跨平台的方法获取Python的OSError信息?
举个简单的例子,当我尝试创建一个文件夹时,可能会遇到一个叫做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'