2010-06-01 37 views
36

我在写一个小应用程序,我需要退出程序多次。如何退出程序:sys.stderr.write()或打印

我应该使用:

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

或者我应该只是做一个:

print 'Error!'
sys.exit(1)

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

回答

70
sys.exit('Error!') 

注意:如果对象的另一种类型的传递

, 无等同于传递零, 任何其他对象打印到 sys.stderr并导致退出代码 为1.特别是,sys.exit(“some 错误消息“)是一种在发生错误时退出 程序的快速方法。

6

如果是错误信息,通常应该输入stderr - 但是否需要这取决于您的使用情况。如果您希望用户重定向stdinstderrstdout,例如,从其他工具运行程序时,应确保将状态信息和错误消息干净地分开。

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

顺便说一句,你可以从the docs

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

谢谢你的回答。 – user225312 2010-06-01 13:29:24

12

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

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被重定向到日志文件,那么在错误记录之前程序崩溃的可能性就会降低。

值得一提的是,有可以提供关闭消息的第三种方式:

sys.exit('My error message') 

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