Seltsamkeit mit einem Dekorateur

9

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?

    
Denis 13.01.2012, 18:10
quelle

2 Antworten

14

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.

    
jknupp 13.01.2012, 18:20
quelle
2

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:

%Vor%

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

    
multipleinterfaces 13.01.2012 18:18
quelle

Tags und Links