From 1643d5cb08b72cb4f589ddd38db059412a4dcdd1 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sun, 28 Sep 2014 12:48:46 -0400 Subject: [PATCH] give exception a nice message (closes #22379) Patch by Yongzhi Pan. --- Lib/test/string_tests.py | 13 ++++++------- Lib/test/test_string.py | 11 ++++------- Lib/test/test_userstring.py | 12 +++++------- Misc/ACKS | 1 + Misc/NEWS | 3 +++ Objects/stringobject.c | 2 +- 6 files changed, 20 insertions(+), 22 deletions(-) diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py index 0479601fc2..7818112122 100644 --- a/Lib/test/string_tests.py +++ b/Lib/test/string_tests.py @@ -65,14 +65,12 @@ class CommonTest(unittest.TestCase): self.assertTrue(object is not realresult) # check that object.method(*args) raises exc - def checkraises(self, exc, object, methodname, *args): - object = self.fixtype(object) + def checkraises(self, exc, obj, methodname, *args): + obj = self.fixtype(obj) args = self.fixtype(args) - self.assertRaises( - exc, - getattr(object, methodname), - *args - ) + with self.assertRaises(exc) as cm: + getattr(obj, methodname)(*args) + self.assertNotEqual(cm.exception.message, '') # call object.method(*args) without any checks def checkcall(self, object, methodname, *args): @@ -1057,6 +1055,7 @@ class MixinStrUnicodeUserStringTest: self.checkequal('a b c', ' ', 'join', BadSeq2()) self.checkraises(TypeError, ' ', 'join') + self.checkraises(TypeError, ' ', 'join', None) self.checkraises(TypeError, ' ', 'join', 7) self.checkraises(TypeError, ' ', 'join', Sequence([7, 'hello', 123L])) try: diff --git a/Lib/test/test_string.py b/Lib/test/test_string.py index 0d07b91394..f69255bb33 100644 --- a/Lib/test/test_string.py +++ b/Lib/test/test_string.py @@ -16,13 +16,10 @@ class StringTest( realresult ) - def checkraises(self, exc, object, methodname, *args): - self.assertRaises( - exc, - getattr(string, methodname), - object, - *args - ) + def checkraises(self, exc, obj, methodname, *args): + with self.assertRaises(exc) as cm: + getattr(string, methodname)(obj, *args) + self.assertNotEqual(cm.exception.message, '') def checkcall(self, object, methodname, *args): getattr(string, methodname)(object, *args) diff --git a/Lib/test/test_userstring.py b/Lib/test/test_userstring.py index 51d8e8b7e1..9cca14acfd 100644 --- a/Lib/test/test_userstring.py +++ b/Lib/test/test_userstring.py @@ -28,14 +28,12 @@ class UserStringTest( realresult ) - def checkraises(self, exc, object, methodname, *args): - object = self.fixtype(object) + def checkraises(self, exc, obj, methodname, *args): + obj = self.fixtype(obj) # we don't fix the arguments, because UserString can't cope with it - self.assertRaises( - exc, - getattr(object, methodname), - *args - ) + with self.assertRaises(exc) as cm: + getattr(obj, methodname)(*args) + self.assertNotEqual(cm.exception.message, '') def checkcall(self, object, methodname, *args): object = self.fixtype(object) diff --git a/Misc/ACKS b/Misc/ACKS index 3fb951cddc..fad0d8856b 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1007,6 +1007,7 @@ Mike Pall Todd R. Palmer Juan David Ibáñez Palomar Jan Palus +Yongzhi Pan Mathias Panzenböck M. Papillon Peter Parente diff --git a/Misc/NEWS b/Misc/NEWS index da2c5544db..237da4169a 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ What's New in Python 2.7.9? Core and Builtins ----------------- +- Issue #22379: Fix empty exception message in a TypeError raised in + ``str.join``. + - Issue #22221: Now the source encoding declaration on the second line isn't effective if the first line contains anything except a comment. diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 0b6d36cee0..f95857ab83 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -1594,7 +1594,7 @@ string_join(PyStringObject *self, PyObject *orig) Py_ssize_t i; PyObject *seq, *item; - seq = PySequence_Fast(orig, ""); + seq = PySequence_Fast(orig, "can only join an iterable"); if (seq == NULL) { return NULL; } -- 2.50.1