[pypy-commit] pypy default: (fijal, cfbolz) improve error reporting

fijal noreply at buildbot.pypy.org
Tue Jan 17 13:48:46 CET 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: 
Changeset: r51397:865005356c2f
Date: 2012-01-17 14:48 +0200
http://bitbucket.org/pypy/pypy/changeset/865005356c2f/

Log:	(fijal, cfbolz) improve error reporting

diff --git a/pypy/objspace/std/test/test_unicodeobject.py b/pypy/objspace/std/test/test_unicodeobject.py
--- a/pypy/objspace/std/test/test_unicodeobject.py
+++ b/pypy/objspace/std/test/test_unicodeobject.py
@@ -64,6 +64,12 @@
         check(', '.join([u'a']), u'a')
         check(', '.join(['a', u'b']), u'a, b')
         check(u', '.join(['a', 'b']), u'a, b')
+        try:
+            u''.join([u'a', 2, 3])
+        except TypeError, e:
+            assert 'sequence item 1' in str(e)
+        else:
+            raise Exception("DID NOT RAISE")
 
     if sys.version_info >= (2,3):
         def test_contains_ex(self):
diff --git a/pypy/objspace/std/unicodeobject.py b/pypy/objspace/std/unicodeobject.py
--- a/pypy/objspace/std/unicodeobject.py
+++ b/pypy/objspace/std/unicodeobject.py
@@ -218,19 +218,19 @@
     self = w_self._value
     prealloc_size = len(self) * (size - 1)
     for i in range(size):
-        prealloc_size += len(space.unicode_w(list_w[i]))
+        try:
+            prealloc_size += len(space.unicode_w(list_w[i]))
+        except OperationError, e:
+            if not e.match(space, space.w_TypeError):
+                raise
+            raise operationerrfmt(space.w_TypeError,
+                        "sequence item %d: expected string or Unicode", i)
     sb = UnicodeBuilder(prealloc_size)
     for i in range(size):
         if self and i != 0:
             sb.append(self)
         w_s = list_w[i]
-        try:
-            sb.append(space.unicode_w(w_s))
-        except OperationError, e:
-            if not e.match(space, space.w_TypeError):
-                raise
-            raise operationerrfmt(space.w_TypeError,
-                        "sequence item %d: expected string or Unicode", i)
+        sb.append(space.unicode_w(w_s))
     return space.wrap(sb.build())
 
 def hash__Unicode(space, w_uni):


More information about the pypy-commit mailing list