Logowanie
Python ma już doskonały wbudowany moduł logowania . Możesz tutaj użyć szablonu rejestrowania .
Moduł rejestrowania umożliwia określenie poziomu ważności; podczas debugowania możesz rejestrować wszystko, podczas gdy podczas normalnej pracy możesz rejestrować tylko krytyczne rzeczy. Możesz włączać i wyłączać różne rzeczy.
Większość ludzi po prostu używa podstawowych instrukcji print do debugowania, a następnie usuwa instrukcje print. Lepiej je zostawić, ale wyłącz je; wtedy, gdy pojawi się kolejny błąd, możesz po prostu ponownie włączyć wszystko i przejrzeć dzienniki.
Może to być najlepszy możliwy sposób debugowania programów, które muszą działać szybko, takich jak programy sieciowe, które muszą odpowiedzieć, zanim drugi koniec połączenia sieciowego wygaśnie i znika. Możesz nie mieć dużo czasu na jednoetapowe uruchamianie debuggera; ale możesz po prostu pozwolić uruchomić kod i zarejestrować wszystko, a następnie przejrzeć dzienniki i dowiedzieć się, co się naprawdę dzieje.
EDYCJA: Oryginalny adres URL szablonów to: http://aymanh.com/python-debugging-techniques
Brakuje tej strony, więc zastąpiłem ją odniesieniem do migawki zapisanej na archive.org: http://web.archive.org/web/20120819135307/http://aymanh.com/python-debugging-techniques
Na wypadek, gdyby znowu zniknął, oto szablony, o których wspomniałem. To jest kod pobrany z bloga; Nie napisałem tego.
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()
A oto jego wyjaśnienie, jak korzystać z powyższego. Ponownie, nie mam za to uznania:
Domyślnie moduł rejestrowania wyświetla komunikaty krytyczne, komunikaty o błędach i ostrzeżenia. Aby to zmienić, aby wszystkie poziomy były drukowane, użyj:
$ ./your-program.py --logging=debug
Aby wysłać komunikaty dziennika do pliku o nazwie debug.log, użyj:
$ ./your-program.py --logging-level=debug --logging-file=debug.log