Debuggen von Python mit einer interaktiven Konsole

Einführung

  • Debugging * ist ein Teil des Softwareentwicklungsprozesses, bei dem Programmierer nach Problemen suchen und diese beheben, die die ordnungsgemäße Ausführung der Software verhindern.

Ein nützliches und schnelles Tool zum Debuggen ist das Python-Modul https://docs.python.org/3/library/code.html [+ code +], mit dem der interaktive Interpreter emuliert werden kann. Das Modul bietet Ihnen auch die Möglichkeit, mit Code zu experimentieren, den Sie in Python schreiben.

Das + code + Modul verstehen

Anstatt den Code mit einem Debugger durchzugehen, können Sie https://www.digitalocean.com/community/tutorials/how-to-import-modules-in-python-3 das + code + -Modul] zu Ihrem Python hinzufügen program, um das Programm anzuweisen, die Ausführung anzuhalten und in den interaktiven Modus zu wechseln, um zu überprüfen, wie Ihr Code funktioniert. Das + code + - Modul ist Teil der Python-Standardbibliothek.

Dies ist nützlich, weil Sie einen Interpreter einsetzen können, ohne die Komplexität und Beständigkeit der Programmierdateien zu beeinträchtigen. Durch die Verwendung des Moduls "+ code " können Sie die Verwendung von " print () +" - Anweisungen im gesamten Code als eine Form der Fehlerbehebung vermeiden, die mit der Zeit unhandlich werden kann.

Um das Modul als Debugging-Methode zu verwenden, können Sie die Funktion + interact () + des Moduls verwenden, die die Ausführung des Programms an dem Punkt stoppt, an dem es aufgerufen wird, und Ihnen eine interaktive Konsole zur Verfügung stellt damit Sie den aktuellen Status Ihres Programms überprüfen können.

Die Funktion mit ihren möglichen Parametern ist wie folgt:

code.interact(banner=None, readfunc=None, local=None, exitmsg=None)

Diese Funktion führt eine Read-Eval-Print-Schleife aus und erstellt eine Objektinstanz der Klasse https://docs.python.org/3/library/code.html#code.InteractiveConsole [+ InteractiveConsole +], die die Klasse emuliert Verhalten des interaktiven Python-Interpreters.

Die optionalen Parameter lauten wie folgt:

  • + banner + kann auf string gesetzt werden, damit Sie markieren können, wo der Interpreter gestartet wird

  • + readfunc + kann als https://docs.python.org/3/library/code.html#code.InteractiveConsole.raw_input [+ InteractiveConsole.raw_input () + Methode] verwendet werden

  • + local + legt den Standard-Namespace für die Interpreter-Schleife fest

  • + exitmsg + kann auf einen String gesetzt werden, um zu notieren, wo der Interpreter endet

Mit dem Parameter "+ local +" können Sie beispielsweise Folgendes verwenden:

  • + local = locals () + für einen lokalen Namespace

  • + local = globals () + für einen globalen Namespace

  • + local = dict (globals (), ** locals ()) +, um sowohl den globalen als auch den aktuellen lokalen Namespace zu verwenden

Beachten Sie, dass der Parameter "+ exitmsg " für Python 3.6 neu ist. Wenn Sie also eine ältere Version von Python verwenden, aktualisieren Sie diese oder lassen Sie den Parameter " exitmsg +" weg.

Sie können die Funktion + interact () + an einer beliebigen Stelle in Ihrem Programm platzieren, um den interaktiven Interpreter im Code zu starten.

Arbeiten mit dem + code + Modul

Betrachten wir dies im Kontext eines Bankguthabenprogramms mit dem Namen "+ balances.py ". Wir setzen den Parameter " local " auf " locals () +", um den Namespace auf "local" zu setzen.

balances.py

# Import code module
import code

bal_a = 2324
bal_b = 0
bal_c = 409
bal_d = -2

account_balances = [bal_a, bal_b, bal_c, bal_d]


def display_bal():
   for balance in account_balances:
       if balance < 0:
           print("Account balance of {} is below 0; add funds now."
                 .format(balance))

       elif balance == 0:
           print("Account balance of {} is equal to 0; add funds soon."
                 .format(balance))

       else:
           print("Account balance of {} is above 0.".format(balance))

# Use interact() function to start the interpreter with local namespace
code.interact(local=locals())

display_bal()

Wir haben die Funktion + code.interact () + mit dem Parameter + local = locals () + verwendet, um den lokalen Namespace als Standard innerhalb der Interpreter-Schleife zu verwenden.

Führen Sie das obige Programm mit dem Befehl "+ python3 " aus, wenn wir uns nicht in einer virtuellen Umgebung befinden, oder mit dem Befehl " python +", wenn wir:

python balances.py

Sobald wir das Programm ausführen, erhalten wir zunächst die folgende Ausgabe:

Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

Ihr Cursor wird wie in der interaktiven Python-Shell am Ende der Zeile "+ >>> +" platziert.

Von hier aus können Sie Aufrufe zum Drucken von Variablen, Funktionen usw .:

>>>
409
>>>
[2324, 0, 409, -2]
>>>
Account balance of 2324 is 0 or above.
Account balance of 0 is equal to 0, add funds soon.
Account balance of 409 is 0 or above.
Account balance of -2 is below 0, add funds now.
None
>>>
<function display_bal at 0x104b80f28>
>>>

Wir sehen, dass wir mit dem lokalen Namespace die Variablen drucken und die Funktion aufrufen können. Der letzte Aufruf von "+ print () " zeigt die Position der Funktion " display_bal +" im Computerspeicher.

Wenn Sie mit den Ergebnissen der Arbeit mit dem Interpreter zufrieden sind, können Sie "+ STRG + D " für * nix-basierte Systeme oder " STRG + Z +" für Windows-basierte Systeme drücken, um die Konsole zu verlassen und fahren Sie mit der Ausführung des Programms fort.

Wenn Sie die Konsole verlassen möchten, ohne den Rest des Programms auszuführen, können Sie dies durch Eingabe von + quit () + tun, und das Programm wird abgebrochen.

Um die Parameter + banner + und + exitmsg + zu nutzen, können Sie wie folgt vorgehen:

balances.py

...
# Use interact() function to start the interpreter
code.interact(banner="Start", local=locals(), exitmsg="End")

display_bal()

Wenn wir das Programm ausführen, erhalten wir die folgende Ausgabe, wenn wir das Programm ausführen:

Start
>>>

Mit dem Parameter "+ banner " können Sie mehrere Punkte in Ihrem Code festlegen und identifizieren. Sie können beispielsweise ein " banner " haben, das "" in [for-loop] druckt (https://www.digitalocean.com/community/tutorials/how-to-construct-for-loops-in-python) -3) "` mit einem ` exitmsg `, das `" Out of for loop "+` ausgibt, damit Sie genau erkennen können, wo Sie sich im Code befinden.

Von hier aus können wir den Dolmetscher wie gewohnt benutzen. Sobald wir "+ STRG + D +" eingeben, um den Interpreter zu beenden, erhalten wir die Beendigungsnachricht und die Funktion wird ausgeführt:

End
Account balance of 2324 is 0 or above.
Account balance of 0 is equal to 0, add funds soon.
Account balance of 409 is 0 or above.
Account balance of -2 is below 0, add funds now.

Nach der interaktiven Sitzung ist das Programm nun vollständig ausgeführt.

Sobald Sie das + code + - Modul zum Debuggen Ihres Codes verwendet haben, sollten Sie die + code + - Funktionen und die import-Anweisung entfernen, damit Ihr Programm wie gewohnt ausgeführt wird. Das "+ code +" - Modul bietet ein Hilfsprogramm. Wenn Sie fertig sind, ist es wichtig, nach Ihnen selbst aufzuräumen.

Fazit

Wenn Sie das Modul "+ code " zum Starten einer interaktiven Konsole verwenden, können Sie sich ansehen, was der Code auf granularer Ebene tut, um sein Verhalten zu verstehen und nach Bedarf Änderungen vorzunehmen. Um mehr darüber zu erfahren, können Sie die https://docs.python.org/3/library/code.html[offizielle Dokumentation des ` code +` Moduls] lesen.

Um mehr über andere Methoden zu erfahren, die Sie zum Debuggen Ihres Python-Codes verwenden können, lesen Sie unser Tutorial unter wie Sie Python verwenden Debugger + pdb + und unser Tutorial unter anwendung von logging.