【发布时间】:2011-02-26 08:34:35
【问题描述】:
我正在编写一个小应用程序,我需要多次退出程序。
我应该使用:
sys.stderr.write('Ok quitting')sys.exit(1)
或者我应该做一个:
print 'Error!'sys.exit(1)
哪个更好,为什么?请注意,我需要经常这样做。程序应该完全退出。
【问题讨论】:
标签: python error-handling
我正在编写一个小应用程序,我需要多次退出程序。
我应该使用:
sys.stderr.write('Ok quitting')sys.exit(1)
或者我应该做一个:
print 'Error!'sys.exit(1)
哪个更好,为什么?请注意,我需要经常这样做。程序应该完全退出。
【问题讨论】:
标签: python error-handling
sys.exit('Error!')
来自the docs的备注:
如果传递了另一种类型的对象, None 相当于通过零, 和任何其他对象打印到 sys.stderr 并导致退出代码 1. 特别是 sys.exit("some 错误消息") 是一种快速退出方式 发生错误时的程序。
【讨论】:
它们是显示消息的两种不同方式。
print 通常会转到sys.stdout,并且您知道sys.stderr 的去向。值得知道stdin, stdout, and stderr之间的区别。
stdout 应该用于正常的程序输出,而stderr 应该只保留用于错误消息(异常程序执行)。有用于拆分这些流的实用程序,它允许您的代码用户区分正常输出和错误。
print 可以打印在任何类似文件的对象上,包括sys.stderr:
print >> sys.stderr, 'My error message'
使用sys.stderr 代替sys.stdout 的优点是:
stdout 重定向到文件,他们仍然会在屏幕上看到错误。sys.stderr 重定向到日志文件,则程序在记录错误之前崩溃的可能性较小。值得注意的是,您可以通过第三种方式提供结束信息:
sys.exit('My error message')
这将向stderr 发送一条消息并退出。
【讨论】:
如果是错误消息,通常应该发送到stderr - 但是否有必要取决于您的用例。如果您希望用户重定向stdin、stderr 和stdout,例如从不同的工具运行程序时,则应确保将状态信息和错误消息完全分开。
如果只是您使用该程序,您可能不需要打扰。在这种情况下,您不妨只引发一个异常,程序将自行终止。
顺便说一句,你可以做
print >>sys.stderr, "fatal error" # Python 2.x
print("fatal error", file=sys.stderr) # Python 3.x
【讨论】:
sys.exit ("some error message") 是否适用于 Python 2 和 3?