Wie führe ich dazu, dass Django-Signal-Handler nicht im Stillen ausfallen , wenn im Handler eine Ausnahme auftritt?
Gibt es einen Ort, an dem all diese Fehler protokolliert werden, während Sie den Entwicklungsserver verwenden?
Warum versagen Django-Signal-Handler trotzdem leise? Ist es nicht gegen eine der Zeilen in Zen von Python ?
Zen von Python sagt klar aus ...
Fehler sollten niemals stillschweigend passieren.
Es macht sie zu einem Albtraum zum Debuggen. Alles, was Sie sehen können, ist, dass das Signal nicht ausgelöst wird ...
Ich fand diese Frage aber Die Antwort ist für mich nutzlos, da sie sehr spezifisch für die Frage ist (die Antwort schlägt vor, Pyflakes zu verwenden, ich benutze bereits pydev, das eine zufriedenstellende statische Analyse durchführt)
Bei Verwendung von manage.py shell
erhalte ich eine nicht abgefangene Ausnahme, wenn ich manuell eine FollowTable aus Ihrem Beispiel erstelle. Nicht abgefangene Ausnahmen während einer Anfrage werden jedoch nicht im Terminal angezeigt (abgesehen davon, dass 500 zurückgegeben wurde), stattdessen werden sie im Browser angezeigt. Wenn Sie JavaScript verwenden, um Anfragen zu stellen, sollten Sie in den Debugging-Tools von hdb / chrome nachschauen, um zu sehen, ob es eine Rückverfolgung zurückgibt.
Sieht so aus, als hätte jemand anders geantwortet, wie Tracebacks in der Konsole angezeigt werden: Ссылка
schien für mich zu arbeiten. Ich habe Folgendes getan:
ExceptionLoggingMiddleware
-Klasse zu my_app/__init__.py
hinzugefügt
'my_app.ExceptionLoggingMiddleware'
zu MIDDLEWARE_CLASSES
in settings.py
Ja, ich denke wie du: Fehler sollten niemals leise ausfallen
Djangos eingebaute Signale schlagen nicht stumm aus, weil sie send()
send_robust()
ignoriert Ausnahmen Dokumente aus send_robust ()
send_robust () fängt alle von Pythons Exception-Klasse abgeleiteten Fehler ab und stellt sicher, dass alle Empfänger über das Signal benachrichtigt werden. Wenn ein Fehler auftritt, wird die Fehlerinstanz im Tupel-Paar für den Empfänger zurückgegeben, der den Fehler ausgelöst hat.
Da django send_robust()
nicht verwendet, erkundige dich bitte, wo es aufgerufen wird. Ich denke, es ist in Ihrem Quellcode oder in dem Code einer Drittanbieter-App.
Tags und Links python django error-handling