在python中防御性地中止执行的常用方法是简单地执行以下操作:
if something_went_wrong:
print("Error message: goodbye cruel world")
exit(1)
然而,当使用 jupyter notebook 时,这不是一个好习惯,因为这似乎完全中止了内核,这并不总是需要。除了hack-y inifinte循环之外,jupyter中是否有正确/更好的方法?
答案 0 :(得分:9)
不,exit()
不通常是中止Python执行的方式。
exit()
旨在立即使用状态代码停止解释器。
通常,你会编写一个类似的脚本:
if __name__ == '__main__':
sys.exit(main())
尽量不要将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 :
...
您甚至可以使用%debug
检查堆栈验尸,看看哪里出了问题,但这是另一个主题。