gpt4 book ai didi

Python:为什么从线程调用的 `sys.exit(msg)` 不将 `msg` 打印到 stderr?

转载 作者:太空狗 更新时间:2023-10-29 21:04:25 27 4
gpt4 key购买 nike

今天我遇到了一个事实,即从子线程调用的 sys.exit() 不会终止主进程。我以前不知道这一点,这没关系,但我需要很长时间才能意识到这一点。如果 sys.exit(msg) 会将 msg 打印到 stderr,它会节省很多时间。但它没有。

事实证明,这并不是我的应用程序中的真正错误;它以一种自愿的方式调用了 sys.exit(msg) 并带有一个有意义的错误——但我就是看不到这一点。

In the docs for sys.exit() it is stated :[...] 任何其他对象都打印到 sys.stderr 并导致退出代码 1"

对于来自子线程的调用,这不正确,其中 sys.exit() 显然表现为 thread.exit() :“引发 SystemExit 异常。如果未被捕获,这将导致线程静默退出”

我认为当程序员想要 sys.exit(msg) 打印一条错误消息时,应该只打印它——与调用它的地方无关。为什么不?我目前没有看到任何理由。至少应该在 sys.exit() 的文档中提示该消息不是从线程打印的。

你怎么看?为什么从线程中隐藏错误消息?这有意义吗?

最好的问候,

简·菲利普·格尔克

最佳答案

我同意 Python 文档是不正确的,或者更准确地说是不完整的,关于 sys.exit 和 SystemExit 当被主线程以外的线程调用/引发时;请在 Python 在线跟踪器上打开一个文档问题,以便在未来的文档迭代中解决这个问题(可能是不久的将来——文档修复比代码修复更容易和更顺利;-)。

当然,补救措施非常简单——只需将您用作 threading.Thread 目标的任何函数包装在一个执行 try 的装饰器中/except SystemExit, e: 围绕它,并在终止之前执行您需要的“写入 stderr”额外功能(或者,也许更好,改为使用 logging.error 调用)。但是,对于您正确指出的文档问题,很难考虑这样做,除非并且直到遇到问题并且实际上不得不花一些时间进行调试才能确定它,因为您必须这样做做(代表核心 python 开发人员的集体 - 抱歉!)。

关于Python:为什么从线程调用的 `sys.exit(msg)` 不将 `msg` 打印到 stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1209155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com