Commit 4842ba1e authored by Brett Cannon's avatar Brett Cannon

Remove __unicode__ method so that ``unicode(BaseException)`` succeeds.

Fixes bug #1551432.
parent 4df138ab
...@@ -304,6 +304,15 @@ class ExceptionTests(unittest.TestCase): ...@@ -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): ...@@ -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? ...@@ -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) ...@@ -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},
}; };
......
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