【问题标题】:Is there a way to use sys.exit() to exit my program without a traceback in python?有没有办法在 python 中使用 sys.exit() 退出我的程序而没有回溯?
【发布时间】:2021-06-17 22:26:26
【问题描述】:

程序在我想要的地方结束,并带有正确的 SystemExit 消息,但是在 SystemExit 之前的行中出现了一个 Traceback,显示了它退出的行。有没有办法只显示 SystemExit 和没有回溯的消息?我在程序的开头有“import sys”。

本节的代码是:

if guess == 'q':
    print('q')
    sys.exit('You exited the game')

不需要的输出说:

Traceback (most recent call last):
    File "filelocation\programname.py",
line 38 in <module>
    sys.exit('You exited the game')

想要的输出后面一行说:

SystemExit: You exited the game

【问题讨论】:

    标签: python exit sys traceback


    【解决方案1】:

    sys.exit 的参数不是让您打印退出消息。它旨在提供一个应该是整数的exit code(老实说,我很惊讶底层系统调用没有抱怨参数是一个字符串)。

    如果您想提供消息,请使用print 并致电sys.exit(0)。任何其他退出代码都被视为错误,因此堆栈跟踪。

    编辑:事实上,sys.exit docs 表示sys.exit 的参数可以是非整数,作为退出出错的快捷方式(同样,因此是堆栈跟踪)。

    可选参数 arg 可以是给出退出状态的整数(默认为零),或其他类型的对象。 ... 特别是 sys.exit("some error message") 是在发生错误时快速退出程序的方法。

    【讨论】:

      【解决方案2】:

      您可以将字符串从 sys.exit 中取出:

      import sys
      
      guess = 'q'
      if guess == 'q':
          print('q')
          print('SystemExit: You exited the game')
          sys.exit()
      

      【讨论】:

      • 好的,所以我做了这个更正,回溯仍在出现。有什么建议么?节目快结束了,这没什么大不了的,但我的完美主义让我很恼火。
      猜你喜欢
      • 2012-09-10
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多