Otwieranie powłoki IPython na dowolnym (niezłapanym) wyjątku

Zdefiniowałem następującą (osadzoną) powłokę w Pythonie:

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)

Chciałbym, aby mój program automatycznie umieszczał mnie w tej powłoce, gdy tylko wystąpi wyjątekw zakresie, w którym występuje wyjątek.

Próbowałem z:

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

sys.excepthook = excepthook

Ale to nie wydaje się działać (po prostu dostaję standardowy ślad). Ponadto najlepiej byłoby, gdyby:

IPython drukuje regularne śledzeniei wtedy wrzuca mnie do powłoki IPythona

Jeśli kod, który napisałem powyżej, zadziałał, po prostu wrzuciłby mnie do powłoki IPythona i nie wydrukował traceback.

Aktualizacja 1:

przeczytałemtutaj że uruchamiając kod z IPython, IPython jest odpowiedzialny za przechwytywanie wszystkich wyjątków i może nie być możliwe bezpośrednie nadpisaniesys.excepthook(). Jeśli tak jest, w jaki sposób mogę mieć IPythona do wykonania innych przechwyceń wyjątków (np. Mójipshell()) w zakresie, w którym występuje wyjątek i po wydrukowaniu śledzenia?

Aktualizacja 2:

Wydaje się, że wątek na liście dev omawia ten temat:oprócz zachowania typu hook w ipythonie. Najwyraźniej istnieje funkcjaset_custom_exc to się zajmuje, ale nie jestem pewien, jak mogę to podłączyć do mojegoipshell().

questionAnswers(2)

yourAnswerToTheQuestion