【问题标题】:How to exit a program: sys.stderr.write() or print如何退出程序:sys.stderr.write() 或 print
【发布时间】:2011-02-26 08:34:35
【问题描述】:

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

我应该使用:

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

或者我应该做一个:

print 'Error!'
sys.exit(1)

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

【问题讨论】:

    标签: python error-handling


    【解决方案1】:
    sys.exit('Error!')
    

    来自the docs的备注:

    如果传递了另一种类型的对象, None 相当于通过零, 和任何其他对象打印到 sys.stderr 并导致退出代码 1. 特别是 sys.exit("some 错误消息") 是一种快速退出方式 发生错误时的程序。

    【讨论】:

      【解决方案2】:

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

      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 发送一条消息并退出。

      【讨论】:

        【解决方案3】:

        如果是错误消息,通常应该发送到stderr - 但是否有必要取决于您的用例。如果您希望用户重定向stdinstderrstdout,例如从不同的工具运行程序时,则应确保将状态信息和错误消息完全分开。

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

        顺便说一句,你可以做

        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?
        • @jww:是的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-26
        • 1970-01-01
        • 2022-12-19
        相关资源
        最近更新 更多