Skip to content

Commit 1643d5c

Browse files
committed
give exception a nice message (closes #22379)
Patch by Yongzhi Pan.
1 parent 9ad23c6 commit 1643d5c

6 files changed

Lines changed: 20 additions & 22 deletions

File tree

Lib/test/string_tests.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,12 @@ class subtype(self.__class__.type2test):
6565
self.assertTrue(object is not realresult)
6666

6767
# check that object.method(*args) raises exc
68-
def checkraises(self, exc, object, methodname, *args):
69-
object = self.fixtype(object)
68+
def checkraises(self, exc, obj, methodname, *args):
69+
obj = self.fixtype(obj)
7070
args = self.fixtype(args)
71-
self.assertRaises(
72-
exc,
73-
getattr(object, methodname),
74-
*args
75-
)
71+
with self.assertRaises(exc) as cm:
72+
getattr(obj, methodname)(*args)
73+
self.assertNotEqual(cm.exception.message, '')
7674

7775
# call object.method(*args) without any checks
7876
def checkcall(self, object, methodname, *args):
@@ -1057,6 +1055,7 @@ def test_join(self):
10571055
self.checkequal('a b c', ' ', 'join', BadSeq2())
10581056

10591057
self.checkraises(TypeError, ' ', 'join')
1058+
self.checkraises(TypeError, ' ', 'join', None)
10601059
self.checkraises(TypeError, ' ', 'join', 7)
10611060
self.checkraises(TypeError, ' ', 'join', Sequence([7, 'hello', 123L]))
10621061
try:

Lib/test/test_string.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,10 @@ def checkequal(self, result, object, methodname, *args):
1616
realresult
1717
)
1818

19-
def checkraises(self, exc, object, methodname, *args):
20-
self.assertRaises(
21-
exc,
22-
getattr(string, methodname),
23-
object,
24-
*args
25-
)
19+
def checkraises(self, exc, obj, methodname, *args):
20+
with self.assertRaises(exc) as cm:
21+
getattr(string, methodname)(obj, *args)
22+
self.assertNotEqual(cm.exception.message, '')
2623

2724
def checkcall(self, object, methodname, *args):
2825
getattr(string, methodname)(object, *args)

Lib/test/test_userstring.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,12 @@ def checkequal(self, result, object, methodname, *args):
2828
realresult
2929
)
3030

31-
def checkraises(self, exc, object, methodname, *args):
32-
object = self.fixtype(object)
31+
def checkraises(self, exc, obj, methodname, *args):
32+
obj = self.fixtype(obj)
3333
# we don't fix the arguments, because UserString can't cope with it
34-
self.assertRaises(
35-
exc,
36-
getattr(object, methodname),
37-
*args
38-
)
34+
with self.assertRaises(exc) as cm:
35+
getattr(obj, methodname)(*args)
36+
self.assertNotEqual(cm.exception.message, '')
3937

4038
def checkcall(self, object, methodname, *args):
4139
object = self.fixtype(object)

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,6 +1007,7 @@ Mike Pall
10071007
Todd R. Palmer
10081008
Juan David Ibáñez Palomar
10091009
Jan Palus
1010+
Yongzhi Pan
10101011
Mathias Panzenböck
10111012
M. Papillon
10121013
Peter Parente

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ What's New in Python 2.7.9?
1010
Core and Builtins
1111
-----------------
1212

13+
- Issue #22379: Fix empty exception message in a TypeError raised in
14+
``str.join``.
15+
1316
- Issue #22221: Now the source encoding declaration on the second line isn't
1417
effective if the first line contains anything except a comment.
1518

Objects/stringobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1594,7 +1594,7 @@ string_join(PyStringObject *self, PyObject *orig)
15941594
Py_ssize_t i;
15951595
PyObject *seq, *item;
15961596

1597-
seq = PySequence_Fast(orig, "");
1597+
seq = PySequence_Fast(orig, "can only join an iterable");
15981598
if (seq == NULL) {
15991599
return NULL;
16001600
}

0 commit comments

Comments
 (0)