Запускать оболочку IPython при исключении

Есть ли способ запустить оболочку 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 со всеми доступными областями.

47
задан Michael Currie 14 August 2015 в 00:30
поделиться