Python 如何退出程序:sys.stderr.write()或print

Python 如何退出程序:sys.stderr.write()或print,python,error-handling,Python,Error Handling,我正在编写一个小应用程序,我需要多次退出该程序 我应该使用: sys.stderr.write('Ok quitting')sys.exit(1) 或者我应该做一个: print'错误!'系统退出(1) 哪一个更好,为什么?请注意,我需要经常这样做。程序应该完全退出。如果是错误消息,通常应该转到stderr——但这是否必要取决于您的用例。如果您希望用户重定向stdin、stderr和stdout,例如从其他工具运行程序时,那么您应该确保状态信息和错误消息清晰地分开 如果只是你在使用这个程序,你可

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

我应该使用:

sys.stderr.write('Ok quitting')

sys.exit(1)

或者我应该做一个:

print'错误!'
系统退出(1)


哪一个更好,为什么?请注意,我需要经常这样做。程序应该完全退出。

如果是错误消息,通常应该转到
stderr
——但这是否必要取决于您的用例。如果您希望用户重定向
stdin
stderr
stdout
,例如从其他工具运行程序时,那么您应该确保状态信息和错误消息清晰地分开

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

顺便说一下,你可以

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

如果传递了另一种类型的对象, 零等于零, 任何其他对象都会打印到 sys.stderr并生成退出代码 第1页。特别是sys.exit(“一些 “错误消息”)是一种快速退出的方法 发生错误时的程序


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

print
通常会转到
sys.stdout
,您知道
sys.stderr
的去向。了解两者之间的区别是值得的

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

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

print >> sys.stderr, 'My error message'
对错误使用
sys.stderr
而不是sys.stdout的优点是:

  • 如果用户将标准输出重定向到文件,他们仍然会在屏幕上看到错误
  • 它是无缓冲的,因此如果将
    sys.stderr
    重定向到日志文件,则在记录错误之前程序崩溃的可能性较小
  • 值得注意的是,有第三种方式可以提供结束语:

    sys.exit('My error message')
    

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

    sys.exit(“一些错误消息”)
    对Python2和Python3都有效吗?@jww:是的。
    sys.exit('My error message')