Jupyter Notebook中exit为何未抛出SystemExit异常?
Jupyter Notebook中
exit()函数的特殊行为 Jupyter Notebook里的exit()和IPython中的实现完全不同,这就是为什么你的测试代码出现差异:
1. IPython中的exit()行为
IPython的exit是自定义封装函数,调用时会抛出SystemExit异常(继承自BaseException)。你的裸except:语句会捕获所有BaseException子类,因此能拦截这个异常并执行print('Did not exit'),之后IPython才会处理后续退出逻辑,所以能看到预期输出。
2. Jupyter Notebook中的exit()行为
Jupyter的内核作为独立后台进程运行,它重载了exit函数:调用exit()时,会直接调用底层的os._exit()终止整个内核进程,完全绕过Python的异常处理机制。这意味着你的try块执行exit(0)后,进程直接被杀死,except块的代码根本没有机会运行,最终表现为内核崩溃重启。
替代方案:演示裸except的问题
如果想在Jupyter中演示裸except能捕获SystemExit这类异常,可以手动抛出异常,而不是调用exit():
try: raise SystemExit(0) except: print('Did not exit')
这段代码会正常执行print语句,符合你最初的演示预期。
内容的提问来源于stack exchange,提问作者Daniel Walker
相关产品推荐
相关产品推荐

