Есть ли способ запустить оболочку IPython или запрос, когда моя программа запускает строку, вызывающую исключение?
] Меня больше всего интересует контекст, переменные в области (и подобластях), в которой возникло исключение. Что-то вроде отладки Visual Studio, когда исключение генерируется, но никем не обнаружено, Visual Studio останавливается и выдаёт мне стек вызовов и переменные, присутствующие на каждом уровне.
Как вы думаете, есть? Как получить нечто подобное с помощью IPython?
РЕДАКТИРОВАТЬ: Параметр -pdb
при запуске IPython, похоже, не выполняет то, что я хочу (или, может быть, я не знаю, как его использовать правильно, что вполне возможно). Я запускаю следующий сценарий:
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, в котором у меня есть доступ к глобальным переменным сценария, но не к локальным переменным функции func. pdb
вызывается только тогда, когда я напрямую набираю команду в ipython, которая вызывает ошибку, то есть поднять NameError («Это, отправленное из приглашения IPython, вызовет pdb.»)
. . 12180] Мне не обязательно использовать pdb
, я просто хотел бы иметь доступ к переменным внутри func
.
РЕДАКТИРОВАТЬ 2: Прошло некоторое время, опция IPython -pdb
теперь работает так, как я хочу. Это означает, что когда я вызываю исключение, я могу вернуться в область видимости func
и прочитать ее переменные z
и g
без каких-либо проблем. Даже без установки параметра -pdb
можно запустить IPython в интерактивном режиме, а затем вызвать волшебную функцию % debug
после того, как программа завершится с ошибкой - это также приведет вас к интерактивная подсказка ipdb со всеми доступными областями.