web-dev-qa-db-fra.com

Comment obtenir l'errno d'une IOError?

C a perror et errno, qui impriment et stockent la dernière erreur rencontrée. C'est pratique lorsque vous faites le fichier io car je n'ai pas à fstat () chaque fichier qui échoue comme argument à fopen () pour présenter à l'utilisateur la raison de l'échec de l'appel.

Je me demandais quelle est la bonne façon de saisir errno lors de la gestion gracieuse de l'exception IOError en python?

 Dans [1]: fp = open ("/ notthere") 
 -------------------------- ------------------------------------------------- 
 IOError Traceback (dernier appel le plus récent) 
 
/Home/mugen/in () 
 
 IOError: [Errno 2] Aucun fichier ou répertoire: '/notthere'[.____.[‑. _______________. _________ Dans [2]: fp = open ("test/testfile") 
 --------- -------------------------------------------------- ---------------- 
 IOError Traceback (dernier appel le plus récent) 
 
/Home/mugen/in () 
 
 IOError: [Errno 13] Autorisation refusée: 'test/testfile' 
 
 
 Dans [5]: essayez: 
 .. .: fp = open ("nothere") 
 ...: sauf IOError: 
 ...: print "Cela a échoué pour une raison quelconque ..." 
 ... : 
 ...: 
 Cela a échoué pour une raison quelconque ... 
21
jr0d

L'exception a un attribut errno:

try:
    fp = open("nothere")
except IOError as e:
    print(e.errno)
    print(e)
33
stefanw

Voici comment procéder. Voir également le module errno et os.strerror fonction pour certains utilitaires.

import os, errno

try:
    f = open('asdfasdf', 'r')
except IOError as ioex:
    print 'errno:', ioex.errno
    print 'err code:', errno.errorcode[ioex.errno]
    print 'err message:', os.strerror(ioex.errno)

Pour plus d'informations sur les attributs IOError, consultez la classe de base EnvironmentError:

28
ars
try:
    fp = open("nothere")
except IOError as err:
    print err.errno 
    print err.strerror
21
Pavel Minaev

Différentes exceptions peuvent également être testées dans la même clause `` excepté '', par ex.

try:
    serial_port.open()
except (AttributeError, SerialException) as e:
    print('cannot open serial port: {}'.format(e))
2
Oppy