Kaydet (Commit) c8d907c6 authored tarafından Barry Warsaw's avatar Barry Warsaw

As per discussion on python-dev, descriptors defined in C with a NULL setter

now raise AttributeError instead of TypeError, for consistency with their
pure-Python equivalent.
üst a267563f
...@@ -12,6 +12,11 @@ What's New in Python 2.5 alpha 1? ...@@ -12,6 +12,11 @@ What's New in Python 2.5 alpha 1?
Core and builtins Core and builtins
----------------- -----------------
- Descriptors defined in C with a PyGetSetDef structure, where the setter is
NULL, now raise an AttributeError when attempting to set or delete the
attribute. Previously a TypeError was raised, but this was inconsistent
with the equivalent pure-Python implementation.
- It is now safe to call PyGILState_Release() before - It is now safe to call PyGILState_Release() before
PyEval_InitThreads() (note that if there is reason to believe there PyEval_InitThreads() (note that if there is reason to believe there
are multiple threads around you still must call PyEval_InitThreads() are multiple threads around you still must call PyEval_InitThreads()
......
...@@ -144,7 +144,7 @@ getset_get(PyGetSetDescrObject *descr, PyObject *obj, PyObject *type) ...@@ -144,7 +144,7 @@ getset_get(PyGetSetDescrObject *descr, PyObject *obj, PyObject *type)
return res; return res;
if (descr->d_getset->get != NULL) if (descr->d_getset->get != NULL)
return descr->d_getset->get(obj, descr->d_getset->closure); return descr->d_getset->get(obj, descr->d_getset->closure);
PyErr_Format(PyExc_TypeError, PyErr_Format(PyExc_AttributeError,
"attribute '%.300s' of '%.100s' objects is not readable", "attribute '%.300s' of '%.100s' objects is not readable",
descr_name((PyDescrObject *)descr), descr_name((PyDescrObject *)descr),
descr->d_type->tp_name); descr->d_type->tp_name);
...@@ -199,7 +199,7 @@ getset_set(PyGetSetDescrObject *descr, PyObject *obj, PyObject *value) ...@@ -199,7 +199,7 @@ getset_set(PyGetSetDescrObject *descr, PyObject *obj, PyObject *value)
if (descr->d_getset->set != NULL) if (descr->d_getset->set != NULL)
return descr->d_getset->set(obj, value, return descr->d_getset->set(obj, value,
descr->d_getset->closure); descr->d_getset->closure);
PyErr_Format(PyExc_TypeError, PyErr_Format(PyExc_AttributeError,
"attribute '%.300s' of '%.100s' objects is not writable", "attribute '%.300s' of '%.100s' objects is not writable",
descr_name((PyDescrObject *)descr), descr_name((PyDescrObject *)descr),
descr->d_type->tp_name); descr->d_type->tp_name);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment