[Python-Dev] Inconsistent exception for read-only properties?
Jack Diederich
jack at performancedrivers.com
Sun Apr 17 18:07:20 CEST 2005
On Sun, Apr 17, 2005 at 11:53:31AM -0400, Jack Diederich wrote:
> On Sat, Apr 16, 2005 at 07:24:27PM -0400, Barry Warsaw wrote:
> > On Thu, 2005-04-14 at 23:46, Barry Warsaw wrote:
> > > I've noticed an apparent inconsistency in the exception thrown for
> > > read-only properties for C extension types vs. Python new-style
> > > classes.
> >
> > I haven't seen any follow ups on this, so I've gone ahead and posted a
> > patch, assigning it to Raymond:
> >
> > http://sourceforge.net/tracker/index.php?func=detail&aid=1184449&group_id=5470&atid=105470
> >
> In 2.4 & 2.3 does it make sense to raise an exception that multiply inherits
> from both TypeError and AttributeError? If anyone currently does catch the
> error raising only AttributeError will break their code. 2.5 should just
> raise an AttributeError, of course.
>
> If that's acceptable I'll gladly submit a similar patch for mmap.get_byte()
> PyErr_SetString (PyExc_ValueError, "read byte out of range");
> has always irked me (the same thing with mmap[i] is an IndexError).
> I hadn't thought of a clean way to fix it, but MI on the error might work.
>
I just did a quick grep for raised ValueErrors with "range" in the
explanation string and didn't find any general consensus. I dunno what
that means, if anything.
wopr:~/src/python_head/dist/src# find ./ -name '*.c' | xargs grep ValueError | grep range | wc -l
13
wopr:~/src/python_head/dist/src# find ./ -name '*.c' | xargs grep IndexError | grep range | wc -l
31
(long versions below)
-jackdied
wopr:~/src/python_head/dist/src# find ./ -name '*.c' | xargs grep -n IndexError | grep range
./Modules/arraymodule.c:599: PyErr_SetString(PyExc_IndexError, "array index out of range");
./Modules/arraymodule.c:997: PyErr_SetString(PyExc_IndexError, "pop index out of range");
./Modules/mmapmodule.c:639: PyErr_SetString(PyExc_IndexError, "mmap index out of range");
./Modules/mmapmodule.c:727: PyErr_SetString(PyExc_IndexError, "mmap index out of range");
./Modules/_heapqmodule.c:19: PyErr_SetString(PyExc_IndexError, "index out of range");
./Modules/_heapqmodule.c:58: PyErr_SetString(PyExc_IndexError, "index out of range");
./Modules/_heapqmodule.c:136: PyErr_SetString(PyExc_IndexError, "index out of range");
./Modules/_heapqmodule.c:173: PyErr_SetString(PyExc_IndexError, "index out of range");
./Modules/_heapqmodule.c:310: PyErr_SetString(PyExc_IndexError, "index out of range");
./Modules/_heapqmodule.c:349: PyErr_SetString(PyExc_IndexError, "index out of range");
./Objects/bufferobject.c:403: PyErr_SetString(PyExc_IndexError, "buffer index out of range");
./Objects/listobject.c:876: PyErr_SetString(PyExc_IndexError, "pop index out of range");
./Objects/rangeobject.c:94: PyErr_SetString(PyExc_IndexError,
./Objects/stringobject.c:1055: PyErr_SetString(PyExc_IndexError, "string index out of range");
./Objects/structseq.c:62: PyErr_SetString(PyExc_IndexError, "tuple index out of range");
./Objects/tupleobject.c:104: PyErr_SetString(PyExc_IndexError, "tuple index out of range");
./Objects/tupleobject.c:310: PyErr_SetString(PyExc_IndexError, "tuple index out of range");
./Objects/unicodeobject.c:5164: PyErr_SetString(PyExc_IndexError, "string index out of range");
./Python/exceptions.c:1504:PyDoc_STRVAR(IndexError__doc__, "Sequence index out of range.");
./RISCOS/Modules/drawfmodule.c:534: { PyErr_SetString(PyExc_IndexError,"drawf index out of range");
./RISCOS/Modules/drawfmodule.c:555: { PyErr_SetString(PyExc_IndexError,"drawf index out of range");
./RISCOS/Modules/drawfmodule.c:578: { PyErr_SetString(PyExc_IndexError,"drawf index out of range");
./RISCOS/Modules/swimodule.c:113: { PyErr_SetString(PyExc_IndexError,"block index out of range");
./RISCOS/Modules/swimodule.c:124: { PyErr_SetString(PyExc_IndexError,"block index out of range");
./RISCOS/Modules/swimodule.c:136: { PyErr_SetString(PyExc_IndexError,"block index out of range");
./RISCOS/Modules/swimodule.c:150: { PyErr_SetString(PyExc_IndexError,"block index out of range");
./RISCOS/Modules/swimodule.c:164: { PyErr_SetString(PyExc_IndexError,"block index out of range");
./RISCOS/Modules/swimodule.c:225: { PyErr_SetString(PyExc_IndexError,"block index out of range");
./RISCOS/Modules/swimodule.c:237: { PyErr_SetString(PyExc_IndexError,"block index out of range");
./RISCOS/Modules/swimodule.c:248: { PyErr_SetString(PyExc_IndexError,"block index out of range");
./RISCOS/Modules/swimodule.c:264: { PyErr_SetString(PyExc_IndexError,"block index out of range");
wopr:~/src/python_head/dist/src# find ./ -name '*.c' | xargs grep -n ValueError | grep range
./Modules/mmapmodule.c:181: PyErr_SetString (PyExc_ValueError, "read byte out of range");
./Modules/mmapmodule.c:301: PyErr_SetString (PyExc_ValueError, "data out of range");
./Modules/mmapmodule.c:524: PyErr_SetString (PyExc_ValueError, "seek out of range");
./Modules/timemodule.c:405: PyErr_SetString(PyExc_ValueError, "month out of range");
./Modules/timemodule.c:409: PyErr_SetString(PyExc_ValueError, "day of month out of range");
./Modules/timemodule.c:413: PyErr_SetString(PyExc_ValueError, "hour out of range");
./Modules/timemodule.c:417: PyErr_SetString(PyExc_ValueError, "minute out of range");
./Modules/timemodule.c:421: PyErr_SetString(PyExc_ValueError, "seconds out of range");
./Modules/timemodule.c:427: PyErr_SetString(PyExc_ValueError, "day of week out of range");
./Modules/timemodule.c:431: PyErr_SetString(PyExc_ValueError, "day of year out of range");
./Objects/rangeobject.c:61: PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
./Objects/rangeobject.c:106: PyErr_SetString(PyExc_ValueError,
./RISCOS/Modules/drawfmodule.c:450: { PyErr_SetString(PyExc_ValueError,"Object out of range");
More information about the Python-Dev
mailing list