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または「FileExists」が常に同じことを意味し、状況に応じて異なる動作をすることができることを知ることができるクロスプラットフォームの方法はありますか?

(これは別の質問の間に出てきました。)

4

1 に答える 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'
于 2008-11-07T22:39:59.947 に答える