[Python-Dev] PyThreadState_SetAsyncExc, PyErr_Clear and native extensions

"Martin v. Löwis" martin at v.loewis.de
Fri May 12 07:16:09 CEST 2006


Gabriel Becedillas wrote:
> Does anybody see any problem with this approach ?, Does anybody have a
> cleaner/better solution ?

I don't think there *is* a solution: asynchronous exceptions and thread
cancellation just cannot work.

In the specific case, the caller of PyErr_Clear will continue its
computation, instead of immediately leaving the function. To solve
this specific problem, you would also have to give PyErr_Clear
an int return code (whether or not the exception was cleared),
and then you need to change all uses of PyErr_Clear to check for
failure, and return immediately (after performing local cleanup,
of course).

You then need to come up with a protocol to determine whether
an exception is "clearable"; the new exception hierarchy suggests
that one should "normally" only catch  Exception, and let any
other BaseException through. So PyErr_Clear should grow a flag
indicating whether you want to clear just all Exceptions, or
indeed all BaseExceptions.

Regards,
Martin


More information about the Python-Dev mailing list