доступ к переменным в сеансе отладки с помощью ipython и% pdb on - PullRequest
7 голосов
/ 15 ноября 2010

Я новичок в ipython и пытаюсь использовать ipython для отладки своего кода. Я сделал:

[1]: %pdb
Automatic pdb calling has been turned ON

, а затем

In [2]: %run mycode.py

и в коде у меня есть 1/0, поэтому он вызывает исключение и автоматически переходит в сеанс отладки.

ZeroDivisionError: float division

ipdb> variable
array([ 0.00704313, -1.34700666, -2.81474391])

Так что я могу получить доступ к переменным. Но когда я делаю следующее:

ipdb> b = variable
*** The specified object '= variable' is not a function or was not found along sys.path.

Но это работает:

ipdb> b = self.X

Ответы [ 4 ]

9 голосов
/ 15 ноября 2010

b используется для установки точек останова.Поэтому все, что следует за b, должно быть функцией или номером строки.

Если вы наберете ipdb> help, вы увидите полный список команд (зарезервированные слова).

Вы можете использоватьскажем, x или y в качестве переменной:

ipdb> y = variable

или

ipdb> exec 'b = variable'
2 голосов
/ 02 июня 2017

Я думаю, вам нужно использовать '!' ( pdb документация ): ! заявление Выполните оператор (в одну строку) в контексте текущего фрейма стека. Восклицательный знак можно опустить , если только первое слово оператора не похоже на команду отладчика . Чтобы установить глобальную переменную, вы можете поставить перед командой присваивания глобальный оператор в той же строке, например ::

global list_options; list_options = ['-l']
1 голос
/ 24 июля 2018

В python3 вы можете использовать один восклицательный знак для переопределения команд ipdb

!b

0 голосов
/ 21 июня 2016

вы можете использовать

locals()["b"] = variable
...