112 votes

Prise en charge générique pour python

J'ai un comportement extrêmement bizarre qui semble se traduire par des exceptions silencieuses. Comment puis-je écrire un try catch général où je peux déboguer toutes les exceptions. Quelque chose du genre :

try:
    # something that fails
except e:
    print e

Un peu plus de détails sur le problème en question :

J'ai une application Django qui sur mon ordinateur (Ubuntu Linux 8.10) fonctionne bien à la fois via runserver et mod-python. Sur le serveur de déploiement (Ubuntu Linux 8.10), elle fonctionne correctement via runserver, mais échoue via apache dans mod-python.

J'ai réduit la cause à une partie de l'application qui utilise Berkeley DB (bsddb.db), et des clés secondaires. La méthode de rappel pour les clés secondaires utilise pickle pour formater les clés. Elle échoue lorsque j'appelle pickle sur une seule valeur. Cependant, il n'échoue que lorsque j'utilise cPickle, et l'utilisation de pickle sur les mêmes valeurs en dehors de la fonction de rappel fonctionne également.

Je veux juste savoir pourquoi il échoue avec cPickle.

215voto

nosklo Points 75862

Les exceptions sont déjà imprimées par défaut avant la fin du programme. Si vous souhaitez envoyer l'erreur ailleurs (et non l'imprimer), vous pouvez le faire :

try:
    something()
except Exception as e:
    send_somewhere(traceback.format_exception(*sys.exc_info()))
    raise # reraises the exception

Il est à noter que ce format utilisant le as est pour python > 2.6. L'ancienne méthode était la suivante :

except Exception, e:

5voto

En module de traçage est très utile pour la mise en forme des traces. Vous pouvez ensuite l'écrire dans un fichier journal.

2voto

Swaroop C H Points 7518

Cela fonctionne-t-il ?

except BaseException, e:

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