Heikki Toivonen wrote:

I was debugging M2Crypto function written in C which changed behavior
between Python 2.6 and earlier Python versions. In an error condition
the function was supposed to raise exception type A, but with 2.6 it
raised type B, and further, there was no string value for the exception.

I tracked this down to the C code incorrectly returning Py_None when it
should have returned NULL. Changing the C code to return NULL made it
behave correctly in 2.6.

I don't know how common a mistake it is to return Py_None when NULL
should have been returned, but it might be worth a note in the list of
changes for 2.6 that this behavior changed, don't you think?

the behaviour when setting the exception status without returning NULL has never been well-defined; it pretty much depends on what kind of error checking the code that runs later happens to use.

(this has been an entertaining source of obscure errors over the years; code that uses PyErr_Clear may mask errors, and code that uses PyErr_Occurred to check if something went wrong might raise the wrong error, often at an unexpected location).

</F>

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to