[Numpy-discussion] Segfault with python 3.2 structured array non-existent field

Matthew Brett matthew.brett at gmail.com
Tue Mar 15 20:13:37 EDT 2011


Hi,

On Tue, Mar 15, 2011 at 10:23 AM, Matthew Brett <matthew.brett at gmail.com> wrote:
> Hi,
>
> On Tue, Mar 15, 2011 at 10:12 AM, Pauli Virtanen <pav at iki.fi> wrote:
>> Tue, 15 Mar 2011 10:06:09 -0700, Matthew Brett wrote:
>>> Sorry to ask, and I ask partly because I'm in the middle of a py3k port,
>>> but is this the right fix to this problem?  I was confused by the
>>> presence of the old PyString_AsString function.
>>
>> It's not a correct fix. The original code seems also wrong ("index" can
>> either be Unicode or Bytes/String object), and will probably bomb when
>> indexing with Unicode strings on Python 2. The right thing to do is to
>> make it show the repr of the "index" object.
>
> OK - I realize I'm being very lazy here but, do you mean:
>
>        PyErr_Format(PyExc_ValueError,
>>>                      "field named %s not found.",
>>>                      PyString_AsString(PyObject_Repr(index)));

Being less lazy, and having read the cpython source, and read
Christoph's mail more carefully, I believe Christoph's patch is
correct...

Unicode indexing of structured array fields doesn't raise an error on
python 2.x; I assume because PyString_AsString is returning a char*
using the Unicode default encoding, as per the docs.

Thanks,

Matthew



More information about the NumPy-Discussion mailing list