如何捕获ctypes中抛出的异常?

Posted

技术标签:

【中文标题】如何捕获ctypes中抛出的异常?【英文标题】:How to catch an exception thrown in ctypes? 【发布时间】:2010-05-16 14:32:58 【问题描述】:

我正在处理一些使用 ctypes 从 Python 调用的 C 代码。在 C 库内部的某个地方,正在发生异常和/或正在调用 abort()。有什么方法可以在我的 Python 调用者代码中捕捉到这一点? (平台为Linux)

【问题讨论】:

【参考方案1】:

您也许可以在 SIGABRT 上设置一个信号处理程序来处理由 abort() 引起的信号。 然而,失败的断言可能伴随着损坏的内存和其他不好的事情——断言失败通常是有原因的。所以通常终止应用程序是你能做的最好的事情(除了在终止之前在你的处理程序中显示/记录错误)。

【讨论】:

是否可以使用 Python 信号模块捕获从通过 ctypes 调用的 C 库发出的 SIGABRT 信号? 我现在已经尝试过了,在我的 C 代码中调用 abort() 不会向我在 Python 中的处理程序发出 SIGABRT 信号。所以我也必须在 C 代码中设置我的信号处理程序。感谢您的提示! @Paul McGuire,我在这方面也面临与您相同的问题。那么请您指导我如何解决这个问题。非常感谢代码 sn-ps 或示例。提前致谢。

以上是关于如何捕获ctypes中抛出的异常?的主要内容,如果未能解决你的问题,请参考以下文章

捕获 AuthenticationProvider 中抛出的异常

捕获在不同线程中抛出的异常

是否可以捕获 JavaScript 异步回调中抛出的异常?

是否有可能捕获JavaScript异步回调中抛出的异常?

Dart:让流中抛出的异常传播并在调用者中捕获它

如何从线程中捕获异常