2017-07-06 6 views
0

何らかのユーザ定義関数で何度もエラーが発生し、デバッグしたいときがあります。メインプログラムでエラーが発生した場合は、エラー後に変数を保持するために-iフラグを使用できます。しかし、ユーザー定義関数でエラーが発生した場合、関数のローカル変数にアクセスする方法はありません。 PythonインタープリタをPythonコードで開き、stdinのコードを受け入れ、stdoutに出力する方法がありますか?このような何か: -Pythonコードを使用してPythonコードをローカル変数で実行する

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

foo() 

我々はstdinを通じて、以下の入力を与えることができる必要があります: -

あなたは関数の外の関数のローカル変数を使用することはできません
print(x) # prints 'Inside foo()' 
exit() # exits interpreter and resumes other code 

答えて

-1

関数外の変数を使用できる場合は、GLOBALを使用してグローバル変数として宣言する必要があります。

+0

グローバル変数でローカル変数を宣言すると、グローバル名前空間が不必要に汚染される –

0

これを行う簡単な方法が見つかりました。より良い方法があるかどうかはわからない - 私は適切に解析するためにスペースを持つ文のために、読み取りにsys.stdinを使用しています

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

。しかし、これは通訳のすべての機能を提供するわけではありません。矢印キーで履歴を参照することはできません。

これはデバッグに非常に役立ちます。エラーが発生すると、その行の前にinterpreter(locals())と呼び出して原因を調査します。私は崇高なスニペットとしてそれを保存して、簡単に任意のPythonコードに追加することができます。

関連する問題