Capture générique pour python

J’ai un comportement extrêmement étrange qui semble entraîner des exceptions silencieuses. Comment puis-je écrire un essai 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 sur le problème en question en détail:

J’ai une application Django qui, sur ma comp (Ubuntu Linux 8.10), fonctionne bien à la fois via serveur d’exécution et mod-python. Sur le serveur de déploiement (Ubunut Linux 8.10), cela fonctionne bien avec le serveur d’exécution, 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. Il échoue lorsque j’appelle pickle sur une seule valeur. Cependant, cela 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.

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

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

Notez que ce format utilisant le mot clé as est pour python> 2.6. L’ancienne était:

 except Exception, e: 

Le module traceback est très utile pour formater les traces. Vous pouvez ensuite l’écrire dans un fichier journal.

Est-ce que ça marche? :

 except BaseException, e: