Die Quelle der Ausnahme kann nicht gefunden werden

9

Ich versuche die Ursache eines Absturzes in unseren Python-Skripten zu finden.

Die Hauptstruktur ist dies:

%Vor%

Ich bekomme dieses Stacktrace in unserer Hauptfehlerbehandlung, nicht in einer Fehler-E-Mail, die ich sollte.

%Vor%

Von dem, was ich sehe, sind alle Schreibaufrufe zum Logger innerhalb des try-Blocks, aber da es nicht gefangen und in meiner E-Mail bearbeitet wird, die einen Ausnahmeblock sendet, scheint es, dass ich etwas verpasst habe. Ich habe überprüft und die sendMail-Funktion verwendet das Logging-Modul überhaupt nicht. Die Ausnahme sollte also nicht in meinem except-Block liegen.

Ich habe versucht,

hinzuzufügen %Vor%

am Anfang der Datei sehen, wo die Ausnahme stammt, aber nichts beeinflusst hat. Und jetzt habe ich keine Ideen mehr, wie ich herausfinden kann, woher das Problem kommt.

Das Skript läuft einmal pro Stunde und stürzt nur etwa einmal pro Woche ab, was mich davon auslässt, dass es etwas mit den Eingabedaten zu tun hat, aber das wird nur von dostuff () gehandhabt.

UPDATE:

Ich habe herausgefunden, warum ich nur eine Reihe des Stacktrace bekomme. Innerhalb der emit () habe ich das gefunden.

%Vor%

Und der relevante Teil der handleError-Funktion sieht folgendermaßen aus:

%Vor%

Gibt nur den letzten Teil des Stacktrace aus.

    
dutt 20.08.2013, 13:31
quelle

1 Antwort

3

Grundsätzlich ist Ihr Problem zweifach

  1. Ein Protokolldatenstrom akzeptiert keine 8-Bit-Zeichenfolgen mit erweiterten Zeichen und löst UnicodeError
  2. aus
  3. Es gibt einen dummen Fehler im Logging-Modul, durch den das ursprüngliche Traceback verloren geht

Die genaue Ursache der Ausnahme ist dies:

%Vor%

Aber diese Ausnahme ist nicht das eigentliche Problem. Dies ist der Teil des Protokollierungscodes 2.6. Die 799 ist die letzte Zeile des Blocks. Die letzte Zeile ist diejenige, die die Probleme verursacht. Im Grunde protokolliert etwas eine Nachricht in einer 8-Bit-Byte-Zeichenfolge, UTF-8 codiert, enthält Latin-1 erweiterte Buchstaben; aber der Stream mag das nicht und wirft einen UnicodeError innerhalb des try-Blocks;

%Vor%

Um dies zu debuggen, sollten Sie einen Breakpoint in der oben erwähnten Zeile 799 einrichten und alle Logger versuchen, wenn sie die folgende Zeichenfolge akzeptieren:

%Vor%

Wenn Sie Zeile 799 drücken, erhalten Sie das Backtrace der Ausnahme, es kann etwas Licht in das Geschehen bringen ...

    
Antti Haapala 20.08.2013, 14:26
quelle

Tags und Links