2016-05-04 6 views
0

Wir haben ein paar Django Post-Speichern-Signale auf dem Benutzerobjekt, die externe Abhängigkeiten aufrufen (CRMs, Mail-Provider, etc). Diese Anrufe sind nice-to-haves und sollten den Benutzer nicht blockieren oder Fehler verursachen, wenn sie auftreten.Django-Signalfehler allgemein unterdrücken?

Die Bibliotheken haben verschiedene Fehlerzustände (keine Verbindung zu externem Dienst, schlechter Schlüssel usw.), und es war ein Schmerz zu modellieren, also habe ich einen Ausnahme-unterdrückenden Dekorator gemacht, den ich auf die Signale anwenden kann also blockieren sie nie.

def exception_suppressor() 
    def suppressor(*args, **kwargs): 
     try: 
      return fn(*args, **kwargs) 
     except Exception as e: 
      LOGGER.info("Suppressing exception: " + str(e)) 
    return suppressor 
  1. Ist das weit getan? Gibt es bessere Möglichkeiten, es zu tun?
  2. Gibt es irgendwelche Builtins, die das zur Verfügung stellen können? Ich sah ein with-context-block-Konstrukt, das dies zuließ, aber keinen Decorator.

Antwort

1

Ihr Code sieht gut aus für mich. Ich habe in vielen Projekten try-except-else Blöcke verwendet und es hat mir eine Menge Schmerzen erspart. Ich bin kein Experte in Python, also bin ich mir nicht sicher, ob es bessere Möglichkeiten gibt, dies zu tun, aber dieser Code sollte gut genug sein.