jupyter:如何停止执行错误?

gus*_*rom 2 python jupyter

在python中防御性地中止执行的常用方法是简单地执行以下操作:

if something_went_wrong:
    print("Error message: goodbye cruel world")
    exit(1)
Run Code Online (Sandbox Code Playgroud)

但是,使用jupyter笔记本时这不是一个好习惯,因为这似乎完全中止内核,这并不总是需要.除了hack-y inifinte循环之外,jupyter中是否有正确/更好的方法?

Mat*_*att 10

不,exit()通常不是中止Python执行的方法. exit()意味着立即使用状态代码停止解释器.

通常,您将编写如下脚本:

 if __name__ == '__main__':
     sys.exit(main())
Run Code Online (Sandbox Code Playgroud)

尽量不要放在sys.exit()代码的中间 - 这是不好的做法,你最终可能会得到非封闭的文件句柄或锁定的资源.

要做你想做的事,只需提出正确类型的例外.如果它传播到eval循环,IPython将停止笔记本执行.

此外,它将为您提供有用的错误消息和堆栈跟踪.

if type(age) is not int:
    raise TypeError("Age must be an integer")
elif age < 0:
    raise ValueError("Sorry you can't be born in the future")
else :
    ...
Run Code Online (Sandbox Code Playgroud)

您甚至可以检查堆栈验尸,%debug看看哪里出了问题,但那是另一个主题.