2017-09-21 3 views
0

Nach Python's Logging tutorial, logging.error ist zu verwenden "zu melden Unterdrückung eines Fehlers ohne eine Ausnahme zu erheben.", Während, wenn ich einen Fehler melden wollte ich nur eine Ausnahme auslösen und Verwenden Sie nicht logging überhaupt.korrekte Art der Anzeige von Fehlermeldungen

Was ist, wenn ich einen Fehler melden und dann eine Ausnahme auslösen möchte?

Zum Beispiel:

try:                   
    os.path.getsize('/nonexistent')           
except os.error as error:             
    logging.error(str(error))            
    logging.error('something went wrong')         
    raise SystemExit(1)              

Daraus ergeben sich die folgenden Zeilen an dem Standardfehler gedruckt wird:

ERROR:root:[Errno 2] No such file or directory: '/nonexistent' 
ERROR:root:something went wrong 

Es scheint sinnvoll. Oder:

try:                   
    os.path.getsize('/nonexistent')           
except os.error as error:             
    logging.error(str(error))            
    raise SomeUserDefinedException('something went wrong') 

Ist diese schlechte Praxis?

Antwort

1
  • logging wird verwendet, um zu berichten.
  • raise ist eine Aktion, die den normalen Ablauf des Programms unterbricht.

Typischerweise Sie raise Ausnahmen, wo es ein tatsächlicher Fluss zu unterbrechen, und wenn Sie melden möchten, können Sie logging, die Fehler und Ausnahmen von Standardprotokoll wird.

Der logging Teil kommt normalerweise als Wrapper um ein Modul, eine Klasse oder Middleware in Ihrem Programm.

logging innerhalb des Codes sollte nur für DEBUG Zwecke verwendet werden, oder für INFO Zweck, wenn Sie den Überblick über einige Informationen in Ihren Server-Logs zum Beispiel halten wollen. Nicht für FEHLER.

+0

Also was soll man für das Melden von Fehlern verwenden? –

+0

Sie sollten das Protokollierungssetup global haben, um alle Fehler und Ausnahmen abzufangen, und es wird die Ausnahmemeldung angezeigt, die Sie in der 'raise' Bedingung gesetzt haben. – MrE

1

Ich glaube nicht, dass das eine schlechte Praxis ist. Ausnahmen und Protokollierung dienen zwei verschiedenen Zwecken und in jeder gegebenen Situation möchten Sie eine, die andere oder beide. Ausnahmen sind der programmatische Verbrauch und der Kontrollfluss innerhalb Ihres Codes, während die Protokollierung für den externen Verbrauch entweder durch einen menschlichen oder irgendeinen automatisierten Log Watcher (zB Splunk) erfolgt. Sie können beispielsweise die Werte bestimmter Variablen protokollieren, um herauszufinden, was passiert ist, und den Code verbessern. In diesem Fall wäre jedoch ein Debug-Level angemessener. Oder Sie möchten, dass ein Systemadministrator das Problem erkennt und möglicherweise etwas unternimmt. In diesem Fall ist es sinnvoll, die Protokollierungsstufe auf "Fehler" zu setzen und einen Syslog-Protokollierungs-Handler zu verwenden.

Verwandte Themen