2010-05-16 6 views
2

Je travaille avec du code C appelé à partir de Python en utilisant des ctypes. Quelque part dans les entrailles de la bibliothèque C, une exception est en cours et/ou abort() est appelée. Est-ce que je peux attraper ceci dans mon code d'appelant Python? (La plate-forme est Linux)Comment attraper une exception levée dans ctypes?

Répondre

3

Vous pouvez configurer un gestionnaire de signal sur SIGABRT pour gérer le signal provoqué par abort(). Cependant, les assertions échouées peuvent aller de pair avec de la mémoire corrompue et d'autres mauvaises choses - il y a généralement une raison pour laquelle une assertion a échoué. Donc généralement terminer les applications est la meilleure chose que vous pouvez faire (sauf afficher/enregistrer une erreur dans votre gestionnaire avant de terminer).

+0

L'utilisation du module de signal Python me permettra-t-elle d'intercepter un SIGABRT signalé à partir de la bibliothèque C appelée via ctypes? – PaulMcG

+1

J'ai essayé cela maintenant, et appeler abort() dans mon code C ne signale pas SIGABRT à mon gestionnaire en Python. Donc, je vais devoir configurer mon gestionnaire de signal dans le code C aussi. Merci pour les conseils! – PaulMcG

+0

@Paul McGuire, je suis également confronté au même problème que vous avez rencontré dans cet aspect. Alors pourriez-vous s'il vous plaît me guider comment pourrais-je résoudre ceci. Des extraits de code ou des exemples sont très appréciés. Merci d'avance. –

Questions connexes