Открытие оболочки IPython для любого (необработанного) исключения

Я определил следующую (встроенную) оболочку в Python:

from IPython.config.loader import Config
cfg = Config()
prompt_config = cfg.PromptManager
prompt_config.in_template = 'N.In <\\#>: '
prompt_config.in2_template = '   .\\D.: '
prompt_config.out_template = 'N.Out<\\#>: '
banner_msg = ("\n**Nested Interpreter:\n"
"Hit Ctrl-D to exit interpreter and continue program.\n"
"Note that if you use %kill_embedded, you can fully deactivate\n"
"This embedded instance so it will never turn on again")
exit_msg = '**Leaving Nested interpreter'

from IPython.frontend.terminal.embed import InteractiveShellEmbed
ipshell = InteractiveShellEmbed(config=cfg, banner1=banner_msg, exit_msg=exit_msg)

Я хотел бы, чтобы моя программа автоматически помещала меня в эту оболочку всякий раз, когда есть исключение,в области, где происходит исключение.

Я пробовал с:

def excepthook(type, value, traceback):
    ipshell(msg)

sys.excepthook = excepthook

Но это, похоже, не работает (я просто получаю стандартную трассировку). Кроме того, в идеале было бы лучше, если бы:

IPython печатает обычную трассировкуа потом бросает меня в оболочку IPython

Если код, который я написал выше, сработает, он просто поместит меня в оболочку IPython, а не выведет трассировку.

Обновление 1:

я прочиталВот что при запуске кода из IPython IPython отвечает за перехват всех исключений, и что может быть невозможно напрямую переопределитьsys.excepthook(), Если это так, как я могу заставить IPython выполнять другие ловушки исключений (например, мойipshell()) в области, где возникает исключение, и после того, как оно печатает след?

Обновление 2:

Кажется, в списке разработчиков есть ветка, обсуждающая это:похожее на крючок поведение в ipython, Есть видимо функцияset_custom_exc это заботится об этом, но я не уверен, как я мог бы подключить это к моейipshell().

Ответы на вопрос(2)

Ваш ответ на вопрос