mirror of
https://github.com/python/cpython.git
synced 2025-10-15 03:10:29 +00:00
Remove __unicode__ method so that `unicode(BaseException)
` succeeds.
Fixes bug #1551432.
This commit is contained in:
parent
b3304c129f
commit
19d76c5aa8
4 changed files with 13 additions and 19 deletions
|
@ -304,6 +304,15 @@ class ExceptionTests(unittest.TestCase):
|
||||||
return -1
|
return -1
|
||||||
self.assertRaises(RuntimeError, g)
|
self.assertRaises(RuntimeError, g)
|
||||||
|
|
||||||
|
def testUnicodeStrUsage(self):
|
||||||
|
# Make sure both instances and classes have a str and unicode
|
||||||
|
# representation.
|
||||||
|
self.failUnless(str(Exception))
|
||||||
|
self.failUnless(unicode(Exception))
|
||||||
|
self.failUnless(str(Exception('a')))
|
||||||
|
self.failUnless(unicode(Exception(u'a')))
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
run_unittest(ExceptionTests)
|
run_unittest(ExceptionTests)
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,7 @@ class ExceptionClassTests(unittest.TestCase):
|
||||||
self.failUnless(issubclass(Exception, object))
|
self.failUnless(issubclass(Exception, object))
|
||||||
|
|
||||||
def verify_instance_interface(self, ins):
|
def verify_instance_interface(self, ins):
|
||||||
for attr in ("args", "message", "__str__", "__unicode__", "__repr__",
|
for attr in ("args", "message", "__str__", "__repr__", "__getitem__"):
|
||||||
"__getitem__"):
|
|
||||||
self.failUnless(hasattr(ins, attr), "%s missing %s attribute" %
|
self.failUnless(hasattr(ins, attr), "%s missing %s attribute" %
|
||||||
(ins.__class__.__name__, attr))
|
(ins.__class__.__name__, attr))
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,9 @@ What's New in Python 2.5 release candidate 2?
|
||||||
Core and builtins
|
Core and builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Bug #1551432: Exceptions do not define an explicit __unicode__ method. This
|
||||||
|
allows calling unicode() on exceptions classes directly to succeed.
|
||||||
|
|
||||||
- Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack.
|
- Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack.
|
||||||
Also make sure that every exception class has __module__ set to
|
Also make sure that every exception class has __module__ set to
|
||||||
'exceptions'.
|
'exceptions'.
|
||||||
|
|
|
@ -175,27 +175,10 @@ BaseException_setstate(PyObject *self, PyObject *state)
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Py_USING_UNICODE
|
|
||||||
/* while this method generates fairly uninspired output, it a least
|
|
||||||
* guarantees that we can display exceptions that have unicode attributes
|
|
||||||
*/
|
|
||||||
static PyObject *
|
|
||||||
BaseException_unicode(PyBaseExceptionObject *self)
|
|
||||||
{
|
|
||||||
if (PyTuple_GET_SIZE(self->args) == 0)
|
|
||||||
return PyUnicode_FromUnicode(NULL, 0);
|
|
||||||
if (PyTuple_GET_SIZE(self->args) == 1)
|
|
||||||
return PyObject_Unicode(PyTuple_GET_ITEM(self->args, 0));
|
|
||||||
return PyObject_Unicode(self->args);
|
|
||||||
}
|
|
||||||
#endif /* Py_USING_UNICODE */
|
|
||||||
|
|
||||||
static PyMethodDef BaseException_methods[] = {
|
static PyMethodDef BaseException_methods[] = {
|
||||||
{"__reduce__", (PyCFunction)BaseException_reduce, METH_NOARGS },
|
{"__reduce__", (PyCFunction)BaseException_reduce, METH_NOARGS },
|
||||||
{"__setstate__", (PyCFunction)BaseException_setstate, METH_O },
|
{"__setstate__", (PyCFunction)BaseException_setstate, METH_O },
|
||||||
#ifdef Py_USING_UNICODE
|
|
||||||
{"__unicode__", (PyCFunction)BaseException_unicode, METH_NOARGS },
|
|
||||||
#endif
|
|
||||||
{NULL, NULL, 0, NULL},
|
{NULL, NULL, 0, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue