638 votes

Obtenir une description d'exception et une trace de pile qui ont provoqué une exception, le tout sous la forme d'une chaîne

J'ai vu beaucoup d'articles sur les trace de la pile et exceptions en Python. Mais je n'ai pas trouvé ce dont j'ai besoin.

J'ai un morceau de Python 2.7 code qui peut lever une exception. Je voudrais de l'attraper et de les assigner à une chaîne de sa description et de la trace de la pile qui a provoqué l'erreur (tout simplement tout ce que nous utilisons pour voir sur la console). J'ai besoin de cette chaîne pour imprimer à une zone de texte dans l'interface utilisateur.

Quelque chose comme ceci:

try:
    method_that_can_raise_an_exception(params)
except Exception, e:
    print_to_textbox(complete_exception_description(e))

Le problème est: qu'est-ce que la fonction complete_exception_description?

894voto

kindall Points 60645

Voir le module traceback , en particulier la fonction format_exc() . Ici .

 import traceback

try:
    raise ValueError
except:
    tb = traceback.format_exc()
else:
    tb = "No error"
finally:
    print tb
 

38voto

aeter Points 1395
 >>> import sys
>>> import traceback
>>> try:
...   5 / 0
... except ZeroDivisionError, e:
...   type_, value_, traceback_ = sys.exc_info()
>>> traceback.format_tb(traceback_)
['  File "<stdin>", line 2, in <module>\n']
>>> value_
ZeroDivisionError('integer division or modulo by zero',)
>>> type_
<type 'exceptions.ZeroDivisionError'>
>>>
>>> 5 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
 

Vous utilisez sys.exc_info () pour collecter les informations et les fonctions dans le module traceback pour le formater. Voici quelques exemples pour le formater.

La chaîne d'exception entière est à:

 >>> ex = traceback.format_exception(type_, value_, traceback_)
>>> ex
['Traceback (most recent call last):\n', '  File "<stdin>", line 2, in <module>\n', 'ZeroDivisionError: integer division or modulo by zero\n']
 

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