Возможно ли в Python внести изменения в код, который вы в настоящее время отлаживаете и продолжаете без перезапуска? (Например, я могу использовать С#.)
Поддерживает ли какие-либо среды Python редактирование и продолжение?
Ответ 1
У вас есть полная мощность интерпретатора у вас под рукой pdb
, используйте
import pdb
pdb.set_trace()
Оттуда вы можете определить и создать новые объекты, переопределить существующие, модифицировать и перезагрузить модули и т.д. Синтаксис симуляра к gdb
. Если вы используете ipython, ipdb
может быть более приятным выбором, или вы можете автоматически вызывать отладчик с помощью магической функции ipython %debug
.
Ответ 2
Вы можете указать новые значения для имен, но там могут быть места, относящиеся к старому значению. Проверьте сеанс ниже в оболочке python:
>>> def foo(): print 'Foo'
...
>>> bar = foo
>>>
>>> foo()
Foo
>>> bar()
Foo
>>>
>>> def foo(): print 'Bar'
...
>>> foo()
Bar
>>> bar()
Foo
>>>
>>> def call(): foo()
...
>>> call()
Bar
>>>
>>>
>>> def foo(): print 'Foo reloaded!'
...
>>>
>>> foo()
Foo reloaded!
>>> bar()
Foo
>>>
>>> call()
Foo reloaded!
>>>
Функция call
относится к новому foo
, но bar
было назначено значение старого foo
и которое не изменяется при повторном использовании имени foo
.
Запрашивали ли вы поддержку редактора? Python-mode в Emacs может запускать "нижний процесс python", на который вы можете отправлять блоки кода при игре с ними. Или вы можете сделать это непосредственно в оболочке Python, как показано выше.