2010-11-14 4 views
3

J'écris un serveur démon en utilisant python, parfois il y a des erreurs d'exécution python, par exemple un type de variable n'est pas correct. Cette erreur ne provoquera pas la sortie du processus.Comment faire pour rediriger les erreurs d'exécution python?

Est-il possible pour moi de rediriger une telle erreur d'exécution vers un fichier journal?

+1

http://docs.python.org/library/logging.html – ajreal

+0

double possible de [ Consignation des exceptions non interceptées dans Python] (http://stackoverflow.com/questions/6234405/logging-uncaught-exceptions-in-python) – guneysus

Répondre

5

Il semble que vous posiez deux questions.

Pour éviter que votre processus ne se termine en cas d'erreur, vous devez capturer tous les exception qui sont déclenchés à l'aide de try...except...finally.

Vous souhaitez également rediriger toutes les sorties vers un journal. Heureusement, Python fournit un module complet logging pour votre commodité.

Un exemple, pour votre plus grand plaisir et délectation:

#!/usr/bin/env python 

import logging 
logging.basicConfig(filename='warning.log', level=logging.WARNING) 

try: 
    1/0 
except ZeroDivisionError, e: 
    logging.warning('The following error occurred, yet I shall carry on regardless: %s', e) 

appareil émet gracieusement:

% cat warning.log 
WARNING:root:The following error occurred, yet I shall carry on regardless: integer division or modulo by zero 
+2

Il y a aussi logging.exception (msg) qui regarde le contexte de l'exception et ajoute automagiquement une traceback. – Tobu

+0

Il est en effet. À quel point Python est-il bon ?! – Johnsyweb

2

Regardez le module traceback. Si vous attrapez un RuntimeError, vous pouvez l'écrire dans le journal (voir le module logging pour cela).

Questions connexes