Есть ли способ запустить оболочку 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, которая вызывает ошибку, например raise NameError("This, sent from the IPython prompt, will trigger pdb.")
.
Мне не обязательно использовать pdb
, я просто хотел бы получить доступпеременным внутри func
.
РЕДАКТИРОВАТЬ 2: Давным-давно опция IPython -pdb
работает так, как я хочу.Это означает, что когда я вызываю исключение, я могу без проблем вернуться к области действия func
и прочитать ее переменные z
и g
.Даже не устанавливая параметр -pdb
, можно запустить IPython в интерактивном режиме, а затем вызвать магическую функцию %debug
после завершения работы программы с ошибкой - это также приведет к появлению интерактивного приглашения ipdb со всеми доступными областями действия.