mirror of https://github.com/python/cpython.git
Fix bug:
[ 1327110 ] wrong TypeError traceback in generator expressions by removing the code that can stomp on the users' TypeError raised by the iterable argument to ''.join() -- PySequence_Fast (now?) gives a perfectly reasonable message itself. Also, a couple of tests.
This commit is contained in:
parent
aee2e2829d
commit
b2308bb9be
|
@ -657,6 +657,15 @@ def test_join(self):
|
||||||
self.checkraises(TypeError, ' ', 'join')
|
self.checkraises(TypeError, ' ', 'join')
|
||||||
self.checkraises(TypeError, ' ', 'join', 7)
|
self.checkraises(TypeError, ' ', 'join', 7)
|
||||||
self.checkraises(TypeError, ' ', 'join', Sequence([7, 'hello', 123L]))
|
self.checkraises(TypeError, ' ', 'join', Sequence([7, 'hello', 123L]))
|
||||||
|
try:
|
||||||
|
def f():
|
||||||
|
yield 4 + ""
|
||||||
|
self.fixtype(' ').join(f())
|
||||||
|
except TypeError, e:
|
||||||
|
if '+' not in str(e):
|
||||||
|
self.fail('join() ate exception message')
|
||||||
|
else:
|
||||||
|
self.fail('exception not raised')
|
||||||
|
|
||||||
def test_formatting(self):
|
def test_formatting(self):
|
||||||
self.checkequal('+hello+', '+%s+', '__mod__', 'hello')
|
self.checkequal('+hello+', '+%s+', '__mod__', 'hello')
|
||||||
|
|
|
@ -51,6 +51,17 @@ def test_join(self):
|
||||||
|
|
||||||
self.checkraises(TypeError, string_tests.BadSeq1(), 'join', ' ')
|
self.checkraises(TypeError, string_tests.BadSeq1(), 'join', ' ')
|
||||||
self.checkequal('a b c', string_tests.BadSeq2(), 'join', ' ')
|
self.checkequal('a b c', string_tests.BadSeq2(), 'join', ' ')
|
||||||
|
try:
|
||||||
|
def f():
|
||||||
|
yield 4 + ""
|
||||||
|
self.fixtype(' ').join(f())
|
||||||
|
except TypeError, e:
|
||||||
|
if '+' not in str(e):
|
||||||
|
self.fail('join() ate exception message')
|
||||||
|
else:
|
||||||
|
self.fail('exception not raised')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ModuleTest(unittest.TestCase):
|
class ModuleTest(unittest.TestCase):
|
||||||
|
|
|
@ -1620,10 +1620,6 @@ string_join(PyStringObject *self, PyObject *orig)
|
||||||
|
|
||||||
seq = PySequence_Fast(orig, "");
|
seq = PySequence_Fast(orig, "");
|
||||||
if (seq == NULL) {
|
if (seq == NULL) {
|
||||||
if (PyErr_ExceptionMatches(PyExc_TypeError))
|
|
||||||
PyErr_Format(PyExc_TypeError,
|
|
||||||
"sequence expected, %.80s found",
|
|
||||||
orig->ob_type->tp_name);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4148,10 +4148,6 @@ PyUnicode_Join(PyObject *separator, PyObject *seq)
|
||||||
|
|
||||||
fseq = PySequence_Fast(seq, "");
|
fseq = PySequence_Fast(seq, "");
|
||||||
if (fseq == NULL) {
|
if (fseq == NULL) {
|
||||||
if (PyErr_ExceptionMatches(PyExc_TypeError))
|
|
||||||
PyErr_Format(PyExc_TypeError,
|
|
||||||
"sequence expected, %.80s found",
|
|
||||||
seq->ob_type->tp_name);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue