28 votes

Existe-t-il un moyen multiplateforme d'obtenir des informations de OSError de Python?

Sur un répertoire simple opération de création par exemple, je peux en faire une OSError comme ceci:

(Linux Ubuntu)

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

Maintenant, je peux rattraper cette erreur comme ceci:

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

Est-il une croix-plate-forme de sorte que je puisse savoir que le 17 ou le Fichier Existe " veut toujours dire la même chose afin que je puisse agir différemment selon la situation?

(Ceci est survenu lors d'une autre question.)

43voto

Brian Points 48423

L' errno de l'attribut sur l'erreur doit être le même sur toutes les plateformes. Vous obtiendrez WindowsError des exceptions sur Windows, mais puisque c'est une sous-classe de OSError le même "except OSError:" bloc de l'attraper. Windows dispose de ses propres codes d'erreur, et ceux-ci sont accessibles en tant que .winerror, mais l' .errno attribut doit toujours être présent, et utilisable en une croix-plate-forme de façon.

Les noms symboliques pour les différents codes d'erreur peuvent être trouvés dans l' errnomodule. Par exemple,

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

Vous pouvez également effectuer la recherche inversée (pour savoir quel est le code que vous devez utiliser) avec errno.errorcode. C'est:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X