Elpyを使用してEmacsでIPython3を実行しており、ネストされた関数をその場で編集しようとしています。たとえば、添付ファイルを 1 つのフレームで開き、IPython3 を別のフレームで開いています。でバッファーを IPython に送信しC-c C-y b
、 で IPython フレームに切り替えC-x o
ます。
import sys
def print_name():
print ("Alice")
def name ():
print_name()
def main(argv):
print ("In main.")
import ipdb; ipdb.set_trace()
name()
if __name__ == "__main__":
main(sys.argv[1:])
と入力してコードを実行しますmain(0)
。
In [1]: main(0)
In main.
> /Users/ayank/Documents/programming/python/bar.py(12)main()
11 import ipdb; ipdb.set_trace()
---> 12 name()
13
デバッグ プロンプトが表示され、次のように実行します。
ipdb> name()
Alice
ここで、 のコード ウィンドウに戻りprint_name()
、 に変更Alice
しBob
、関数を で IPython3 に再送信しますC-c C-y f
。IPython フレームに次のように表示されます。
ipdb> def print_name():
...: print ("Bob")
IPython フレームに戻り、次のように入力します。
ipdb> name()
Alice
ipdb> print_name()
Bob
それは正しくありません: 両方とも を出力する必要がありますBob
。を使用してバッファー全体を IPython に再送信できC-c C-y b
ますが、同じ答えが得られname()
ますAlice
。
何が起きてる?デバッグ中に IPython3 のネストされた関数を更新するにはどうすればよいですか?