Как управлять переменной, имя которой конфликтует с командами PDB?

95

Мой код, к лучшему или худшему, изобилует однобуквенными переменными (это физика, поэтому эти буквы имеют смысл), а также NumPy, с которыми я часто взаимодействую.

При использовании отладчика Python, иногда я хочу посмотреть на значение, скажем, n. Однако когда я нажимаю n<enter>, это команда PDB для (n)ext, которая имеет более высокий приоритет. print nработает, глядя на него, но как я могу его установить?

Ник Т
источник
2
Вид излишне, но вы пробовали eval? eval('n = 3')? Может быть, это поможет :)
Пауло Бу

Ответы:

132

Используйте восклицательный знак !перед оператором, чтобы он запускался:

python -m pdb test.py
> /home/user/test.py(1)<module>()
-> print('foo')
(Pdb) !n = 77
(Pdb) !n
77
(Pdb) n
foo
> /home/user/test.py(2)<module>()
-> print('bar')
(Pdb)

В документах говорится:

! statement

Выполнить (однострочный) оператор в контексте текущего кадра стека. Восклицательный знак можно опустить, если первое слово оператора не напоминает команду отладчика. [...]

Авраам
источник
1
ИМО, было бы удобнее требовать команд ! или какой-нибудь такой префикс.
user76284
13

Вы можете использовать точку с запятой, поэтому просто поставьте перед ней что-нибудь другое:

ipdb> print n
2
ipdb> n
> 145 <some code here>
  146
  147

ipdb> 1; n=4
1
ipdb> print n
4
Корли Бригман
источник
7
Функциональный обходной путь, но я считаю, что "!" предназначен ли оператор для рассмотрения этого дела.
динозавр
2

Это не прямой ответ на ваш вопрос, но он может вам помочь: PuDB - это консольный визуальный интерфейс для PDB, который по дизайну отделяет команды от манипуляции с переменными.

Бартош Марцинковски
источник
Выглядит интересно; Мне придется нанести удар, когда у меня будет время учиться
Ник Т.
-1

Эрик IDE, Wing IDE и Spyder, если упомянуть лишь некоторые из них, имеют визуальные отладчики, которые стоит попробовать, поскольку они отделяют отображение значений от команд.

Стив Барнс
источник
визуальные отладчики обычно очень медленные по сравнению с отладкой через консоль, которая почти не требует времени для запуска отладчика.
Любопытный
1
@Curious Они запускаются медленнее, но часто более удобны, особенно для людей с ограниченным опытом.
Стив Барнс,
Для научной работы мне действительно пригодится отладчик Spyder. Я не думаю, что отладка матрицы 10x10 практична в CLI
шаунакде