引发Exception(“有问题的地方”)和sys.exit(“有问题的地方”)之间的区别

时间:2019-12-08 18:40:28

标签: python-3.x

我正在阅读高级同事的代码,他经常使用sys.exit("something is wrong")而不是raise Exception("something is wrong")。我做了一个快速测试:

sys.exit("something is wrong")

输出:

something is wrong

Process finished with exit code 1
raise Exception("something is wrong")

输出:

Traceback (most recent call last):
  File "/Users/myname/gitlab/developer/my_developer/api.py", line 977, in <module>
    raise Exception("something is wrong")
Exception: something is wrong

Process finished with exit code 1

在我看来,raise Exception("something is wrong")提供了traceback信息,该信息显示了该错误发生在哪一行,这对于缩小导致错误的行的范围很有帮助。在sys.exit("something is wrong")中,它仅显示一条错误消息,而没有任何更多信息。对我来说raise Exception似乎更有帮助,但是我不确定我是否理解正确。谢谢

1 个答案:

答案 0 :(得分:0)

这完全取决于您要寻找的内容。两者的含义非常不同。
sys.exit('出问题了')总是会以该消息退出程序。对于最终用户而言,它更干净,不必担心技术堆栈跟踪。
引发Exception('出问题了')会导致该消息出现异常。如果未被捕获,它将退出程序并打印一个堆栈跟踪,使程序员可以查看发生异常的原因,并且如果代码中捕获了异常,则允许程序员编写如果引发异常并继续执行程序接下来应该发生的情况。
这完全取决于程序员想要做什么!