steckbrief - python schlange



Gibt es einen plattformübergreifenden Weg Informationen von Pythons OSError zu erhalten? (1)

Bei einer einfachen Verzeichniserstellung zum Beispiel kann ich einen OSError wie folgt machen:

(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'

Jetzt kann ich diesen Fehler so verstehen:

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

Gibt es einen plattformübergreifenden Weg, von dem ich wissen kann, dass die 17 oder die "Datei existiert" immer dasselbe bedeutet, damit ich je nach Situation anders handeln kann?

(Dies kam während einer anderen Frage auf .)


Das errno Attribut für den Fehler sollte auf allen Plattformen identisch sein. Sie erhalten WindowsError Ausnahmen unter Windows, aber da es sich um eine Unterklasse von OSError handelt, wird derselbe " except OSError: " - Block es abfangen. Windows verfügt über eigene Fehlercodes, auf die als .winerror .errno Attribut .errno sollte jedoch weiterhin vorhanden sein und auf plattformübergreifende Weise verwendet werden können.

Symbolische Namen für die verschiedenen Fehlercodes finden Sie im errno Modul. Beispielsweise,

import os, errno
try:
    os.mkdir('test')
except OSError, e:
    if e.errno == errno.EEXIST:
        # Do something

Sie können auch die umgekehrte Suche (um herauszufinden, welchen Code Sie verwenden sollten) mit errno.errorcode . Das ist:

>>> errno.errorcode[17]
'EEXIST'




cross-platform