在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看看哪里出了问题,但那是另一个主题.