[Cython] memoryview slices can't be None?

mark florisson markflorisson88 at gmail.com
Thu Feb 2 22:16:29 CET 2012

On 2 February 2012 12:19, Dag Sverre Seljebotn
<d.s.seljebotn at astro.uio.no> wrote:
> I just realized that
> cdef int[:] a = None
> raises an exception; even though I'd argue that 'a' is of the "reference"
> kind of type where Cython usually allow None (i.e., "cdef MyClass b = None"
> is allowed even if type(None) is NoneType). Is this a bug or not, and is it
> possible to do something about it?
> Dag Sverre
> _______________________________________________
> cython-devel mailing list
> cython-devel at python.org
> http://mail.python.org/mailman/listinfo/cython-devel

Yeah I disabled that quite early. It was supposed to be working but
gave a lot of trouble in cases (segfaults, mainly). At the time I was
trying to get rid of all the segfaults and get the basic functionality
working, so I disabled it. Personally, I have never liked how things
can be None unchecked. I personally prefer to write

cdef foo(obj=None):
    cdef int[:] a
    if obj is None:
        obj = ...
    a = obj

Often you forget to write 'not None' when declaring the parameter (and
apparently that it only allowed for 'def' functions).

As such, I never bothered to re-enable it. However, it does support
control flow with uninitialized slices, and will raise an error if it
is uninitialized. Do we want this behaviour (e.g. for consistency)?

More information about the cython-devel mailing list