summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2014-09-28 16:48:46 (GMT)
committerBenjamin Peterson <benjamin@python.org>2014-09-28 16:48:46 (GMT)
commit1643d5cb08b72cb4f589ddd38db059412a4dcdd1 (patch)
tree8fb181a9a0a9205c4f4850917ac9ab7b1685264b
parent9ad23c6c315d09bef659a12a9f7f7123c707ea41 (diff)
downloadcpython-1643d5cb08b72cb4f589ddd38db059412a4dcdd1.zip
cpython-1643d5cb08b72cb4f589ddd38db059412a4dcdd1.tar.gz
cpython-1643d5cb08b72cb4f589ddd38db059412a4dcdd1.tar.bz2
give exception a nice message (closes #22379)
Patch by Yongzhi Pan.
-rw-r--r--Lib/test/string_tests.py13
-rw-r--r--Lib/test/test_string.py11
-rw-r--r--Lib/test/test_userstring.py12
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/stringobject.c2
6 files changed, 20 insertions, 22 deletions
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py
index 0479601..7818112 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 0d07b91..f69255b 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 51d8e8b..9cca14a 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 3fb951c..fad0d88 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 da2c554..237da41 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 0b6d36c..f95857a 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;
}