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

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

我应该使用:

sys.stderr.write('Ok quitting')
sys.exit(1)

或者我应该只是做一个:

print 'Error!'
sys.exit(1)

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

 sys.exit('Error!') 

从文档注意:

如果传递了另一种types的对象,则None等同于传递零,而其他任何对象都将打印到sys.stderr,并导致退出代码为1.特别是,sys.exit(“some error message”)是一个快速发生错误时退出程序的方法。

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

print一般去sys.stdout ,你知道sys.stderr在哪里。 值得了解stdin,stdout和stderr之间的区别。

stdout应该用于正常的程序输出,而stderr只能用于错误信息(程序执行exception)。 有用于分割这些stream的实用程序,它允许您的代码的用户区分正常输出和错误。

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

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

使用sys.stderr而不是sys.stdout的优点是:

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

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

 sys.exit('My error message') 

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

如果这是一个错误消息,通常应该去stderr – 但是否这是必要的取决于您的使用情况。 如果您希望用户redirectstdinstderrstdout ,例如从其他工具运行程序时,则应确保将状态信息和错误消息干净地分开。

如果只是你使用这个程序,你可能不需要打扰。 在这种情况下,您可能只会引发exception,程序将自行终止。

顺便说一下,你可以做

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