Ich möchte einen Dekorator erstellen, der Ausnahmen abfängt und sie angemessen protokolliert.
%Vor%Das ist richtig, denke ich, aber dann führe ich es aus und ich habe eine Ausnahme wie folgt:
%Vor%Warum Interpreter sagt mir, dass die Funktion hat keinen Typ, aber rufen Sie es und drucken Antwort?
Ihr Decorator muss eine Funktion zurückgeben, gibt aber nichts zurück, daher ist das 'TypeError:' NoneType '-Objekt nicht aufrufbar'. Sie können es folgendermaßen implementieren:
%Vor%Lesen Sie Diese Frage für ein gutes Beispiel dafür, wie Sie einen Decorator schreiben / verwenden.
logger
, wie Sie es definiert haben, gibt keinen Wert zurück. Alle diese Funktionen können als None
zurückgegeben werden. Sie haben Ihren Dekorateur nicht richtig definiert. Es sollte eher so aussehen:
... aber denken Sie daran, dass dies eine Menge Informationen verliert, viele Ausnahmen fängt und verschluckt und auch alle Rückgabewerte von der so dekorierten foo
-Funktion verschluckt. Während Sie in Ihrem Produktionscode wahrscheinlich etwas anderes machen als das, was Sie hier gezeigt haben, ist es wichtig, dass die Decorator-Funktion selbst eine Funktion zurückgibt, die aufgerufen werden kann ( _logger
in meinem Beispiel).