Wie würdest du einen @ debuggable Decorator in Python schreiben?

8

Beim Debuggen drucke ich gerne alle Ein- und Ausgänge einer Funktion aus (ich weiß, dass ich eine bessere IDE brauche, aber bitte, das könnte für die Fehlerberichterstattung verwendet werden). Also, ich hätte am liebsten:

%Vor%

und verwenden Sie eine globale Variable, um das Debugging ein- oder auszuschalten. Nein, du magst auch keine Globals, vermutete ich.

Das Beste, was ich mir vorstellen kann, ist:

%Vor%

Und läuft:

%Vor%

Wie kann ich das verbessern?

    
Phil H 14.05.2009, 11:26
quelle

4 Antworten

22

Verwenden Sie einen Debugger. Ernst. Es ist eine schlechte Idee, jede Funktion zu dekorieren, die man verfolgen will.

Python hat einen Debugger , so dass Sie keine gute IDE benötigen.

Wenn Sie keinen Debugger verwenden möchten, können Sie die Trace-Funktion verwenden .

%Vor%

Das druckt:

%Vor%

Noch einfacher wäre Winpdb :

Es ist ein plattformunabhängiger grafischer GPL Python-Debugger mit Unterstützung für Remote-Debugging über ein Netzwerk, mehrere Threads, Namespace-Modifikation, eingebettetes Debugging, verschlüsselte Kommunikation und ist bis zu 20 mal schneller als pdb.

Features:

  • GPL Lizenz. Winpdb ist Freie Software.
  • Kompatibel mit CPython 2.3 oder höher.
  • Kompatibel mit wxPython 2.6 oder höher.
  • Plattformunabhängig und auf Ubuntu Gutsy und Windows XP getestet.
  • Benutzeroberflächen: rpdb2 ist konsolenbasiert, während winpdb wxPython 2.6 oder höher benötigt.

Screenshot http://winpdb.org/images/screenshot_winpdb_small.jpg

    
nosklo 14.05.2009, 11:52
quelle
8

Ich denke, was Sie suchen, ist nicht wirklich ein Debugging-Dekorator, sondern eher ein Protokollierer.

Es könnte sinnvoll sein, das Python-Protokollierungsmodul zu verwenden, damit Sie die Protokollierung selbst genauer steuern können . Zum Beispiel könnten Sie in eine Datei ausgeben, um die Ausgabe später zu analysieren.

Der Decorator sieht dann vielleicht eher wie folgt aus:

%Vor%

Wenn Sie den Logger so konfigurieren, dass er in stderr ausgegeben wird, sehen Sie:

%Vor%     
John Montgomery 14.05.2009 12:27
quelle
6

Ich stimme mit nosklo mit einem Debugger ist viel besser als das Schreiben eigener. Ich poste eine Verbesserung für deinen Code. Aber ich denke immer noch, du solltest dem Rat von Nosklo folgen.

Verwenden Sie Decorator-Klassen, um Ihren Debugger sauberer zu machen:

%Vor%     
Nadia Alramli 14.05.2009 11:56
quelle
0

Ich zweite, was Nosklo sagte.

Eine andere Sache zu bemerken ist, dass Ihre Funktion ein bisschen gefährlich ist:

%Vor%

In diesem Fall ist "b" None , weil die dekorierte Funktion nichts zurückgibt.

    
besen 14.05.2009 12:09
quelle

Tags und Links