[Cython] Error handling during buffer reassignment

Stefan Behnel stefan_ml at behnel.de
Wed Sep 6 06:53:14 EDT 2017


Hi,

consider this code:

    cdef np.ndarray[int32, ndim=1] a
    a = new_int32_buffer()
    a = new_float32_buffer()

This fails during the second assignment, but only during validation, after
unpacking the buffer. The code that handles this case is generated here:

https://github.com/cython/cython/blob/c95ca9f21a3524718a83c3415bb7102a508154be/Cython/Compiler/Buffer.py#L376

Note the twist where it says:

        # If acquisition failed, attempt to reacquire the old buffer
        # before raising the exception.

I faintly remember a discussion about that case (apparently back in 2008),
but can't find it in my mail archive. Might have been off-list at the time.

Question: Instead of re-acquiring the buffer (and thus faking the
non-assignment), wouldn't it be better to acquire the new buffer in a temp,
and only overwrite the old "Py_buffer" if all is fine with it?

Stefan


More information about the cython-devel mailing list