【问题标题】:Why is exit code not honored?为什么退出代码不兑现?
【发布时间】:2018-05-11 14:01:58
【问题描述】:

假设我们在test_script.py 中写下以下内容:

sys.exit(-992340374290374)

我们收到以下错误消息:

"[drive_letter]:\[path to python.exe]" [drive_letter]:/[path to script]

Process finished with exit code -1

-1 不是-992340374290374。发生了什么?

【问题讨论】:

  • 未定义的行为?你真的有92340374290373你的程序退出的其他原因吗?或者为什么这个原因?
  • 也许您的操作系统没有处理 64 位返回码...
  • 退出状态不应该是一个字节吗?
  • docs.python.org/3/library/sys.html#sys.exit - 如果 > 127 通常未定义。阅读文档。

标签: python python-3.x exit exit-code


【解决方案1】:

来自sys.exit docs(强调我的):

退出 Python。这是通过提高 SystemExit 来实现的 异常,因此由 try 的 finally 子句指定的清理操作 语句被兑现,并且可以拦截出口 尝试外层。

可选参数 arg 可以是一个给出退出状态的整数 (默认为零)或其他类型的对象。如果是整数, 零被认为是“成功终止”,任何非零值都是 被炮弹等视为“异常终止”。 大多数系统 要求它在 0-127 范围内,并产生未定义的结果 否则。 一些系统有一个约定来分配特定的 特定退出代码的含义,但这些通常是 不发达; Unix 程序一般使用 2 作为命令行语法 错误,1 表示所有其他类型的错误。如果其他类型的对象 是通过,None相当于传零,其他任何对象都是 打印到 stderr 并导致退出代码 1。特别是, sys.exit("some error message") 是一种快速退出程序的方法 发生错误。

【讨论】:

    【解决方案2】:

    这与您的操作系统如何处理退出有关。在documentationsys.exit 中它说:

    大多数系统要求它在 0-127 范围内,否则会产生未定义的结果。

    【讨论】:

      猜你喜欢
      • 2019-10-12
      • 2020-11-17
      • 2011-03-31
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多