是否有跨平台的方式从Python获取信息;什么是错误?

是否有跨平台的方式从Python获取信息;什么是错误?,python,exception,cross-platform,Python,Exception,Cross Platform,例如,在一个简单的目录创建操作中,我可以生成如下操作系统错误: >>> import os >>> os.mkdir('foo') >>> try: ... os.mkdir('foo') ... except OSError, e: ... print e.args ... (17, 'File exists') (Ubuntu Linux) 是否有一种跨平台的方式可以让我知道17或“文件存在”总是意味着同一件事,这样我

例如,在一个简单的目录创建操作中,我可以生成如下操作系统错误:

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

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


(出现此错误。)

在所有平台上,错误上的
errno
属性应相同。您将在Windows上获得
WindowsError
异常,但由于这是OSError的一个子类,因此除了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'

如果原始异常不是
EEXIST
@ford,那么重新激活该异常可能是一个好主意。您能否先发布一个答案测试目录是否存在,然后在创建尝试后重新引发错误?这一切似乎过于复杂。在Linux中,出于我的目的,我会使用
mkdir-p~/.config/mserve
。不过,我不确定Windows中的
~
等价物是什么。很难相信堆栈溢出对于在Python中创建目录没有一个明确的答案……我相信,您问题的第一部分在这里得到了回答:
>>> errno.errorcode[17]
'EEXIST'