diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-09-28 04:53:32 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-09-28 04:53:32 (GMT) |
commit | e9e44484a51d4caab2a28c883dccb7321828abde (patch) | |
tree | a038f8ab6be7663a89cd09839fbb75593bffe7d1 | |
parent | 2e8c939e3d8103cd4f236754764858cb23342ab3 (diff) | |
download | cpython-e9e44484a51d4caab2a28c883dccb7321828abde.zip cpython-e9e44484a51d4caab2a28c883dccb7321828abde.tar.gz cpython-e9e44484a51d4caab2a28c883dccb7321828abde.tar.bz2 |
Issue #28289: ImportError.__init__ now resets not specified attributes.
-rw-r--r-- | Lib/test/test_exceptions.py | 14 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Objects/exceptions.c | 16 |
3 files changed, 23 insertions, 9 deletions
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 4837922..34265a5 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1112,6 +1112,20 @@ class ImportErrorTests(unittest.TestCase): with self.assertRaisesRegex(TypeError, msg): ImportError('test', invalid='keyword', another=True) + def test_reset_attributes(self): + exc = ImportError('test', name='name', path='path') + self.assertEqual(exc.args, ('test',)) + self.assertEqual(exc.msg, 'test') + self.assertEqual(exc.name, 'name') + self.assertEqual(exc.path, 'path') + + # Reset not specified attributes + exc.__init__() + self.assertEqual(exc.args, ()) + self.assertEqual(exc.msg, None) + self.assertEqual(exc.name, None) + self.assertEqual(exc.path, None) + def test_non_str_argument(self): # Issue #15778 with check_warnings(('', BytesWarning), quiet=True): @@ -10,6 +10,8 @@ What's New in Python 3.7.0 alpha 1 Core and Builtins ----------------- +- Issue #28289: ImportError.__init__ now resets not specified attributes. + - Issue #21578: Fixed misleading error message when ImportError called with invalid keyword args. diff --git a/Objects/exceptions.c b/Objects/exceptions.c index f63f06a..bc0264a 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -631,19 +631,17 @@ ImportError_init(PyImportErrorObject *self, PyObject *args, PyObject *kwds) } Py_DECREF(empty_tuple); - if (name) { - Py_INCREF(name); - Py_XSETREF(self->name, name); - } - if (path) { - Py_INCREF(path); - Py_XSETREF(self->path, path); - } + Py_XINCREF(name); + Py_XSETREF(self->name, name); + + Py_XINCREF(path); + Py_XSETREF(self->path, path); + if (PyTuple_GET_SIZE(args) == 1) { msg = PyTuple_GET_ITEM(args, 0); Py_INCREF(msg); - Py_XSETREF(self->msg, msg); } + Py_XSETREF(self->msg, msg); return 0; } |