Есть ли способ запустить оболочку или приглашение IPython, когда моя программа запускает строку, которая вызывает исключение?
В основном меня интересует контекст, переменные, в области (и подкосе), где было создано исключение. Что-то вроде отладки Visual Studio, когда исключение выбрасывается, но не улавливается кем-либо, Visual Studio останавливается и дает мне стек вызовов и переменные, присутствующие на каждом уровне.
Как вы думаете, есть ли способ получить что-то подобное с помощью IPython?
EDIT: Параметр -pdb
при запуске IPython, похоже, не делает то, что я хочу (или, может быть, я не знаю, как правильно его использовать, что вполне возможно). Я запускаю следующий script:
def func():
z = 2
g = 'b'
raise NameError("This error will not be caught, but IPython still"
"won't summon pdb, and I won't be able to consult"
"the z or g variables.")
x = 1
y = 'a'
func()
Используя команду:
ipython -pdb exceptionTest.py
Что прекращает выполнение при возникновении ошибки, но приносит мне приглашение IPython, где у меня есть доступ к глобальным переменным script, но не к локальным переменным функции func. pdb
вызывается только при прямом вводе команды в ipython, которая вызывает ошибку, т.е. raise NameError("This, sent from the IPython prompt, will trigger pdb.")
.
Мне не обязательно использовать pdb
, я просто хочу иметь доступ к переменным внутри func
.
РЕДАКТИРОВАТЬ 2:. В настоящее время IPython -pdb
теперь работает так, как я хочу. Это означает, что когда я создаю исключение, я могу вернуться в область func
и без проблем прочитать его переменные z
и g
. Даже не устанавливая параметр -pdb
, можно запустить IPython в интерактивном режиме, а затем вызвать волшебную функцию %debug
после выхода программы с ошибкой - это также приведет вас к интерактивной подсказке ipdb со всеми доступными доступными областями.