Registrazione
Python ha già un eccellente modulo di registrazione integrato . Si consiglia di utilizzare il modello di registrazione qui .
Il modulo di registrazione consente di specificare un livello di importanza; durante il debug è possibile registrare tutto, mentre durante il normale funzionamento è possibile registrare solo cose critiche. Puoi spegnere e riaccendere le cose.
Molte persone usano semplicemente le istruzioni di stampa di base per eseguire il debug, quindi rimuovono le istruzioni di stampa. È meglio lasciarli dentro, ma disabilitarli; quindi, quando hai un altro bug, puoi semplicemente riattivare tutto e controllare i tuoi log.
Questo può essere il modo migliore per eseguire il debug di programmi che devono eseguire rapidamente operazioni, ad esempio programmi di rete che devono rispondere prima che l'altra estremità della connessione di rete scada e scompaia. Potresti non avere molto tempo per eseguire un singolo passaggio di un debugger; ma puoi semplicemente lasciare che il tuo codice venga eseguito e registrare tutto, quindi esaminare i registri e capire cosa sta realmente accadendo.
EDIT: l'URL originale per i modelli era: http://aymanh.com/python-debugging-techniques
Manca questa pagina, quindi l'ho sostituita con un riferimento all'istantanea salvata su archive.org: http://web.archive.org/web/20120819135307/http://aymanh.com/python-debugging-techniques
Nel caso in cui scompaia di nuovo, ecco i modelli che ho citato. Questo è il codice preso dal blog; Non l'ho scritto.
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()
Ed ecco la sua spiegazione su come usare quanto sopra. Ancora una volta, non ottengo il merito per questo:
Per impostazione predefinita, il modulo di registrazione stampa messaggi critici, di errore e di avviso. Per modificare ciò in modo che tutti i livelli vengano stampati, utilizzare:
$ ./your-program.py --logging=debug
Per inviare messaggi di registro a un file chiamato debug.log, utilizzare:
$ ./your-program.py --logging-level=debug --logging-file=debug.log