[C++-sig] Rational for 'Zero-length slice' RuntimeError?
Hans Meine
meine at informatik.uni-hamburg.de
Sun Jan 4 21:21:20 CET 2009
Hi,
I have exported an array-like class using the __getitem__ implementation given
below among its overloads. It uses boost::python::slice.get_indices(), and I
am getting a RuntimeError when I try to acces e.g. [1:-1] on a 2-element
array. What is the rationale for this "Zero-length slice" error? I would
expect an empty iterator range. OK, if end < begin, that could make
problems, but what am I expected to do to prevent this RuntimeError?
(Yes, I did RTFM, but maybe I am overlooking something?)
template<class Array>
std::auto_ptr<Array>
Array__getitem_slice__(Array const & a, boost::python::slice sl)
{
boost::python::slice::range<typename Array::const_iterator>
bounds = sl.template get_indicies<>(a.begin(), a.end());
if(bounds.step != 1)
{
PyErr_SetString(PyExc_IndexError,
"No extended slicing supported yet.");
boost::python::throw_error_already_set();
}
return std::auto_ptr<Array>(new Array(bounds.start, bounds.stop+1));
}
Ciao, / / .o.
/--/ ..o
/ / ANS ooo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20090104/859e6073/attachment.pgp>
More information about the Cplusplus-sig
mailing list