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

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

我应该使用:

sys.stderr.write('Ok quitting') < br > sys.exit(1)

或者我应该说:

print 'Error!' < br/> sys.exit(1)

哪个更好? 为什么? 注意我需要做很多这样的事情。程序应该完全退出。

70887 次浏览

如果是一个错误消息,通常应该转到 stderr-但是这是否必要取决于您的用例。如果您希望用户重定向 stdinstderrstdout,例如在从不同的工具运行程序时,那么您应该确保状态信息和错误消息被清楚地分开。

如果只是你在使用这个程序,你可能不需要费心。在这种情况下,您最好引发一个异常,程序将自行终止。

顺便说一句,你可以

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

来自 那些文件的注释:

如果传递了另一种类型的对象, 没有一个等于过零, 以及任何其他对象被打印到 并导致退出代码 特别是 sys.exit (“ some 错误信息”)是一种快速退出的方法 发生错误时的程序。

它们是两种不同的信息显示方式。

print通常转到 sys.stdout,你知道 sys.stderr的去向。了解 标准,标准,标准之间的区别是值得的。

stdout应该用于正常的程序输出,而 stderr应该只用于错误消息(程序执行异常)。有一些实用程序可以分割这些流,它允许代码的用户区分正常输出和错误。

print可以打印任何类似文件的对象,包括 sys.stderr:

print >> sys.stderr, 'My error message'

对错误使用 sys.stderr而不是 sys.stdout 的好处是:

  1. 如果用户将 stdout重定向到一个文件,他们仍然会在屏幕上看到错误。
  2. 它是无缓冲的,所以如果 sys.stderr被重定向到一个日志文件,那么在记录错误之前程序崩溃的可能性就会降低。

值得注意的是,还有第三种方式可以提供结束语:

sys.exit('My error message')

这将向 stderr发送一条消息并退出。