Enregistrement
Python a déjà un excellent module de journalisation intégré . Vous pouvez utiliser le modèle de journalisation ici .
Le module de journalisation vous permet de spécifier un niveau d'importance; pendant le débogage, vous pouvez tout consigner, tandis que pendant le fonctionnement normal, vous ne pouvez consigner que les éléments critiques. Vous pouvez éteindre et rallumer les choses.
La plupart des gens utilisent simplement des instructions d'impression de base pour déboguer, puis suppriment les instructions d'impression. Il est préférable de les laisser, mais de les désactiver; puis, lorsque vous avez un autre bogue, vous pouvez simplement tout réactiver et consulter vos journaux.
Cela peut être le meilleur moyen possible de déboguer les programmes qui doivent faire les choses rapidement, tels que les programmes de mise en réseau qui doivent répondre avant que l'autre extrémité de la connexion réseau expire et disparaisse. Vous n'aurez peut-être pas beaucoup de temps pour un débogueur en une seule étape; mais vous pouvez simplement laisser votre code s'exécuter, tout consigner, puis parcourir les journaux et comprendre ce qui se passe réellement.
EDIT: L'URL d'origine des modèles était: http://aymanh.com/python-debugging-techniques
Cette page est manquante, je l'ai donc remplacée par une référence à l'instantané enregistré sur archive.org: http://web.archive.org/web/20120819135307/http://aymanh.com/python-debugging-techniques
Au cas où il disparaîtrait à nouveau, voici les modèles que j'ai mentionnés. C'est du code tiré du blog; Je ne l'ai pas écrit.
import logging
import optparse
LOGGING_LEVELS = {'critical': logging.CRITICAL,
'error': logging.ERROR,
'warning': logging.WARNING,
'info': logging.INFO,
'debug': logging.DEBUG}
def main():
parser = optparse.OptionParser()
parser.add_option('-l', '--logging-level', help='Logging level')
parser.add_option('-f', '--logging-file', help='Logging file name')
(options, args) = parser.parse_args()
logging_level = LOGGING_LEVELS.get(options.logging_level, logging.NOTSET)
logging.basicConfig(level=logging_level, filename=options.logging_file,
format='%(asctime)s %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
# Your program goes here.
# You can access command-line arguments using the args variable.
if __name__ == '__main__':
main()
Et voici son explication sur la façon d'utiliser ce qui précède. Encore une fois, je n'en ai pas le mérite:
Par défaut, le module de journalisation imprime les messages critiques, d'erreur et d'avertissement. Pour changer cela afin que tous les niveaux soient imprimés, utilisez:
$ ./your-program.py --logging=debug
Pour envoyer des messages de journal à un fichier appelé debug.log, utilisez:
$ ./your-program.py --logging-level=debug --logging-file=debug.log