2010-05-16 26 views
2

我正在使用ctypes從Python調用一些C代碼。在C庫的某處,正在發生異常和/或正在調用abort()。有什麼方法可以在我的Python調用者代碼中捕捉到這個嗎? (平臺是Linux)如何捕獲ctypes中引發的異常?

回答

3

您可能可以在SIGABRT上設置一個信號處理程序來處理由abort()引起的信號。 但是,失敗的斷言可能伴隨着損壞的內存和其他不好的事情 - 斷言失敗通常是有原因的。所以通常終止應用程序是你能做的最好的事情(除了在終止之前在你的處理程序中顯示/記錄錯誤)。

+0

將使用Python信號模塊允許我捕獲從C庫調用通過ctypes調用的SIGABRT? – PaulMcG 2010-05-16 19:05:57

+1

我現在已經嘗試過了,在我的C代碼中調用abort()並不會將SIGABRT標示給我的Python處理程序。所以我必須在C代碼中設置我的信號處理程序。感謝您的提示! – PaulMcG 2010-05-16 22:06:49

+0

@Paul McGuire,在這方面我也面臨同樣的問題。所以,請你指導我如何解決這個問題。代碼片段或示例受到高度讚賞。提前致謝。 – 2015-09-14 10:57:37