2017-07-06 6 views
0

Viele Male erhalten wir einen Fehler in einigen benutzerdefinierten Funktion und möchten es debuggen. Wenn der Fehler im Hauptprogramm aufgetreten ist, können wir das Flag -i verwenden, um Variablen nach dem Fehler zu erhalten. Wenn der Fehler jedoch in einer benutzerdefinierten Funktion auftritt, können wir nicht auf die lokalen Variablen der Funktion zugreifen. Gibt es einen Weg, wo wir Python-Interpreter über Python-Code öffnen, Code von stdin akzeptieren und Ausgabe auf stdout drucken können. Etwas wie folgt aus: -Führen Sie Python-Interpreter mit Python-Code, mit lokalen Variablen

def foo(): 
    x = 'Inside foo()' 
    run_interpreter() # Pauses for input 

foo() 

Wir sollten folgende Eingabe durch stdin geben können: -

print(x) # prints 'Inside foo()' 
exit() # exits interpreter and resumes other code 

Antwort

-1

Sie können eine lokale Variable einer Funktion außerhalb der Funktion verwenden. Wenn Sie eine Variable außerhalb der Funktion verwenden können, müssen Sie sie als global Variable mit GLOBAL deklarieren.

+0

Das Deklarieren lokaler Variablen mit global wird den globalen Namensraum unnötig verschmutzen –

0

Ich fand einen einfachen Weg, dies zu tun. Ich weiß nicht, ob es eine bessere Art und Weise ist: -

import sys 
def interpreter(vars): 
    s = sys.stdin.readline().strip('\n') 
    while s!= 'exit()': 
     exec(s, globals(), vars) 
     s = sys.stdin.readline().strip('\n') 

ich sys.stdin verwende, mit Platz für Anweisungen lesen richtig analysiert werden. Dies bietet jedoch nicht alle Funktionalitäten des Interpreters. Wir können den Verlauf nicht mit den Pfeiltasten durchsuchen.

Dies ist sehr nützlich beim Debuggen. Immer wenn ich einen Fehler erhalte, rufe ich interpreter(locals()) vor dieser Zeile an, um die Ursache zu untersuchen. Ich habe es als ein sublimes Snippet gespeichert, so dass es leicht zu jedem Python-Code hinzugefügt werden kann.

Verwandte Themen