Wie mache ich, dass Django-Signal-Handler nicht stummschalten, wenn im Signal-Handler eine Ausnahme auftritt?

9

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)

    
Optimus 23.01.2013, 13:44
quelle

2 Antworten

2

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:

  1. Die ExceptionLoggingMiddleware -Klasse zu my_app/__init__.py hinzugefügt
  2. Hinzugefügt 'my_app.ExceptionLoggingMiddleware' zu MIDDLEWARE_CLASSES in settings.py
  3. Neustart des Entwicklungsservers
monk 23.01.2013, 14:55
quelle
1

Ja, Fehler sollten niemals stillschweigend fehlschlagen

Ja, ich denke wie du: Fehler sollten niemals leise ausfallen

Eingebaute Signale fallen nicht stumm aus

Djangos eingebaute Signale schlagen nicht stumm aus, weil sie send()

verwenden

Nur 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.

Fazit

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.

    
guettli 24.01.2017 12:29
quelle

Tags und Links