Я запускаю IPython3 в Emacs с Elpy и пытаюсь редактировать вложенные функции на лету. Например, у меня есть прикрепленный файл, открытый в одном кадре, и 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 при отладке?