summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCollin Winter <collinw@gmail.com>2007-03-28 21:44:53 (GMT)
committerCollin Winter <collinw@gmail.com>2007-03-28 21:44:53 (GMT)
commit42dae6a89bd24073ae1b66599180cc94f15ff232 (patch)
tree7df2ee86dc68b54e0b207eaa6862bfc82272e382
parentd84da1b67a12df114de2f76e0644174f07f2c834 (diff)
downloadcpython-42dae6a89bd24073ae1b66599180cc94f15ff232.zip
cpython-42dae6a89bd24073ae1b66599180cc94f15ff232.tar.gz
cpython-42dae6a89bd24073ae1b66599180cc94f15ff232.tar.bz2
Make readonly members defined in C throw an AttributeError on modification. This brings them into sync with Python-level attributes. Fixes bug #1687163.
-rw-r--r--Lib/test/test_csv.py4
-rw-r--r--Lib/test/test_descr.py6
-rw-r--r--Lib/test/test_generators.py2
-rw-r--r--Lib/test/test_os.py4
-rw-r--r--Python/structmember.c2
5 files changed, 9 insertions, 9 deletions
diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py
index 46361c8..2cdc807 100644
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -53,8 +53,8 @@ class Test_Csv(unittest.TestCase):
self.assertEqual(obj.dialect.skipinitialspace, False)
self.assertEqual(obj.dialect.strict, False)
# Try deleting or changing attributes (they are read-only)
- self.assertRaises(TypeError, delattr, obj.dialect, 'delimiter')
- self.assertRaises(TypeError, setattr, obj.dialect, 'delimiter', ':')
+ self.assertRaises(AttributeError, delattr, obj.dialect, 'delimiter')
+ self.assertRaises(AttributeError, setattr, obj.dialect, 'delimiter', ':')
self.assertRaises(AttributeError, delattr, obj.dialect, 'quoting')
self.assertRaises(AttributeError, setattr, obj.dialect,
'quoting', None)
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 6cd8ccd..eec4e40 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -1857,13 +1857,13 @@ def properties():
for attr in "__doc__", "fget", "fset", "fdel":
try:
setattr(raw, attr, 42)
- except TypeError as msg:
+ except AttributeError as msg:
if str(msg).find('readonly') < 0:
raise TestFailed("when setting readonly attr %r on a "
- "property, got unexpected TypeError "
+ "property, got unexpected AttributeError "
"msg %r" % (attr, str(msg)))
else:
- raise TestFailed("expected TypeError from trying to set "
+ raise TestFailed("expected AttributeError from trying to set "
"readonly %r attr on a property" % attr)
class D(object):
diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
index 7999034..12276be 100644
--- a/Lib/test/test_generators.py
+++ b/Lib/test/test_generators.py
@@ -400,7 +400,7 @@ And more, added later.
>>> i.gi_running = 42
Traceback (most recent call last):
...
-TypeError: readonly attribute
+AttributeError: readonly attribute
>>> def g():
... yield me.gi_running
>>> me = g()
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 93e530c..a7fc1da 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -143,7 +143,7 @@ class StatAttributeTests(unittest.TestCase):
try:
result.st_mode = 1
self.fail("No exception thrown")
- except TypeError:
+ except AttributeError:
pass
try:
@@ -201,7 +201,7 @@ class StatAttributeTests(unittest.TestCase):
try:
result.f_bfree = 1
self.fail("No exception thrown")
- except TypeError:
+ except AttributeError:
pass
try:
diff --git a/Python/structmember.c b/Python/structmember.c
index 2bb6e4e..87c1641 100644
--- a/Python/structmember.c
+++ b/Python/structmember.c
@@ -164,7 +164,7 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v)
if ((l->flags & READONLY) || l->type == T_STRING)
{
- PyErr_SetString(PyExc_TypeError, "readonly attribute");
+ PyErr_SetString(PyExc_AttributeError, "readonly attribute");
return -1;
}
if ((l->flags & WRITE_RESTRICTED) && PyEval_GetRestricted()) {