我正在编写一个小应用程序,我需要多次退出该程序。
我应该使用:
sys.stderr.write('Ok quitting')
{
{1}}
或者我应该做一个:
sys.exit(1)
{
{1}}
哪个更好,为什么?请注意,我需要做很多事情。该计划应该完全退出。
答案 0 :(得分:91)
sys.exit('Error!')
来自the docs的注释:
如果传递了另一种类型的对象, 没有相当于传递零, 并打印任何其他对象 sys.stderr并导致退出代码 特别是,sys.exit(“有些 错误消息“)是一种快速退出的方法 发生错误时的程序。
答案 1 :(得分:14)
他们有两种不同的方式来展示信息。
print
通常会转到sys.stdout
,您知道sys.stderr
的去向。值得了解stdin, stdout, and stderr之间的区别。
stdout
应该用于正常的程序输出,而stderr
应该仅保留用于错误消息(异常程序执行)。有一些用于拆分这些流的实用程序,它允许您的代码用户区分正常输出和错误。
print
可以打印在任何类似文件的对象上,包括sys.stderr
:
print >> sys.stderr, 'My error message'
将sys.stderr
用于错误而非sys.stdout的优点是:
stdout
重定向到某个文件,他们仍会在屏幕上看到错误。sys.stderr
重定向到日志文件,则在记录错误之前程序崩溃的可能性会降低。值得注意的是,您可以通过第三种方式提供结束信息:
sys.exit('My error message')
这会向stderr
发送消息并退出。
答案 2 :(得分:9)
如果是错误消息,通常应该转到stderr
- 但这是否有必要取决于您的使用案例。如果您希望用户重定向stdin
,stderr
和stdout
,例如从其他工具运行程序时,则应确保状态信息和错误消息完全分开。
如果只是你使用该程序,你可能不需要打扰。在这种情况下,您可能只是提出异常,程序将自行终止。
顺便说一下,你可以做到
print >>sys.stderr, "fatal error" # Python 2.x
print("fatal error", file=sys.stderr) # Python 3.x