【问题标题】:How can I catch an early termination of Python code?如何捕获 Python 代码的提前终止?
【发布时间】:2022-01-11 02:00:45
【问题描述】:

我使用一些依赖 Python 绑定的 Python 库来执行其他语言的代码。有时底层代码的执行会失败,并且似乎强制停止我的 Python 运行。 tryexcept 无法捕获此类终止。

有没有一种简单的方法来捕获我在 Python 中的代码的任何此类提前终止(或者理想情况下,除CTRL+C 之外的任何终止)?

非常感谢您的帮助

【问题讨论】:

标签: python python-3.x error-handling binding signals


【解决方案1】:

你没有提到平台。在 Linux/Unix/Mac 上,大多数运行时错误都会导致由操作系统生成的信号。您将不得不使用 python 信号包来捕获信号。有几个信号表明操作系统会杀死你的进程而你无法捕捉到它们。这些是 SIGKILL 和 SIGSTOP。当用完允许的堆栈内存时,您也无法捕获 SIGSEG。但可以捕获其他诸如分段错误和总线错误。

也可能是库中的一些其他错误,代码库显式地终止了进程(例如调用 exit())。在那种情况下,据我所知,你很不走运。

【讨论】:

  • 感谢大家的帮助。我正在使用 Mac,但我希望代码也可以在其他平台上工作。我查看了信号模块,似乎正在发出 SIGKILL 信号。是否可以在单独的进程中调用该函数,以便在引发 SIGKILL 时不会中断我的主程序的执行?
  • 很难说没有更多信息。您始终可以编写一个单独的程序来使用您从 python 调用的代码,但您必须管理与该其他程序的通信,并且如果由于某种原因失败,还必须处理重新启动其他程序。或者,您可以找出发生 SIGKILL 的原因。如果它只发生在特定的输入中,你可以在调用它之前清理你的参数以防止失败。'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多