如何退出程序:sys.stderr.write()或print

时间:2010-06-01 13:09:25

标签: python

我正在编写一个小应用程序,我需要多次退出该程序。

我应该使用:

sys.stderr.write('Ok quitting') {
{1}}

或者我应该做一个:

sys.exit(1) {
{1}}

哪个更好,为什么?请注意,我需要做很多事情。该计划应该完全退出。

3 个答案:

答案 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的优点是:

  1. 如果用户将stdout重定向到某个文件,他们仍会在屏幕上看到错误。
  2. 它是无缓冲的,因此如果将sys.stderr重定向到日志文件,则在记录错误之前程序崩溃的可能性会降低。
  3. 值得注意的是,您可以通过第三种方式提供结束信息:

    sys.exit('My error message')
    

    这会向stderr发送消息并退出。

答案 2 :(得分:9)

如果是错误消息,通常应该转到stderr - 但这是否有必要取决于您的使用案例。如果您希望用户重定向stdinstderrstdout,例如从其他工具运行程序时,则应确保状态信息和错误消息完全分开。

如果只是你使用该程序,你可能不需要打扰。在这种情况下,您可能只是提出异常,程序将自行终止。

顺便说一下,你可以做到

print >>sys.stderr, "fatal error"     # Python 2.x
print("fatal error", file=sys.stderr) # Python 3.x