如何退出程序: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的优点是:
- 如果用户将
stdout
redirect到一个文件,他们仍然在屏幕上看到错误。 - 它没有缓冲,所以如果
sys.stderr
被redirect到一个日志文件,那么在错误被logging之前程序崩溃的可能性就会降低。
值得注意的是,还有第三种方法可以提供结束语:
sys.exit('My error message')
这将发送一条消息到stderr
并退出。
如果这是一个错误消息,通常应该去stderr
– 但是否这是必要的取决于您的使用情况。 如果您希望用户redirectstdin
, stderr
和stdout
,例如从其他工具运行程序时,则应确保将状态信息和错误消息干净地分开。
如果只是你使用这个程序,你可能不需要打扰。 在这种情况下,您可能只会引发exception,程序将自行终止。
顺便说一下,你可以做
print >>sys.stderr, "fatal error" # Python 2.x print("fatal error", file=sys.stderr) # Python 3.x