try:
something here
except:
print 'the whatever error occurred.'
Comment puis-je imprimer l'erreur/exception dans mon bloc except:
?
Pour Python 2.6 et versions ultérieures et Python 3.x:
except Exception as e: print(e)
Pour Python 2.5 et versions antérieures, utilisez:
except Exception,e: print str(e)
Le module traceback
fournit des méthodes pour formater et imprimer des exceptions et leurs tracés, par exemple. ceci afficherait une exception comme le fait le gestionnaire par défaut:
import traceback
try:
1/0
except Exception:
traceback.print_exc()
Sortie:
Traceback (most recent call last):
File "C:\scripts\divide_by_zero.py", line 4, in <module>
1/0
ZeroDivisionError: division by zero
Dans Python 2.6 ou supérieur c'est un peu plus propre:
except Exception as e: print(e)
Dans les anciennes versions, cela reste lisible:
except Exception, e: print e
Si vous voulez passer des chaînes d’erreur, voici un exemple de Errors and Exceptions (Python 2.6)
>>> try:
... raise Exception('spam', 'eggs')
... except Exception as inst:
... print type(inst) # the exception instance
... print inst.args # arguments stored in .args
... print inst # __str__ allows args to printed directly
... x, y = inst # __getitem__ allows args to be unpacked directly
... print 'x =', x
... print 'y =', y
...
<type 'exceptions.Exception'>
('spam', 'eggs')
('spam', 'eggs')
x = spam
y = eggs
(J'allais laisser cela comme un commentaire sur la réponse de @ jldupont, mais je n'ai pas assez de réputation.)
J'ai vu des réponses comme celle de @ jldupont ailleurs. FWIW, je pense qu'il est important de noter que ceci:
except Exception as e:
print(e)
imprimera la sortie d'erreur sur sys.stdout
par défaut. Une approche plus appropriée du traitement des erreurs en général serait la suivante:
except Exception as e:
print(e, file=sys.stderr)
(Notez que vous devez import sys
pour que cela fonctionne.) De cette façon, l'erreur est imprimée sur STDERR
au lieu de STDOUT
, ce qui permet d'analyser correctement la sortie, de la rediriger, etc. Je comprends que la question portait strictement sur "l'impression d'une erreur", mais il semble important de souligner la meilleure pratique ici plutôt que de laisser de côté ce détail qui pourrait conduire à un code non standard pour ceux qui n'apprendraient finalement pas mieux.
Je n'ai pas utilisé le module traceback
comme dans la réponse de Cat Plus Plus, et c'est peut-être la meilleure solution, mais je pensais que je l'aurais mis là-dessus.
Une erreur de relèvement peut être générée avec des déclarations d'assertion si c'est ce que vous voulez faire. Cela vous aidera à écrire du code statiquement réparable et à vérifier les erreurs plus tôt.
assert type(A) is type(""), "requires a string"
Si vous souhaitez imprimer le message sur stderr, quittez avec un code d'état de 1 (erreur):
import sys
try:
...
except Exception as e:
sys.exit("Message to print to stderr")