[pypy-commit] pypy reflex-support: really pretty error messages

wlav noreply at buildbot.pypy.org
Thu Mar 29 02:47:53 CEST 2012


Author: Wim Lavrijsen <WLavrijsen at lbl.gov>
Branch: reflex-support
Changeset: r54051:6c98c84b301b
Date: 2012-03-28 17:47 -0700
http://bitbucket.org/pypy/pypy/changeset/6c98c84b301b/

Log:	really pretty error messages

diff --git a/pypy/module/cppyy/interp_cppyy.py b/pypy/module/cppyy/interp_cppyy.py
--- a/pypy/module/cppyy/interp_cppyy.py
+++ b/pypy/module/cppyy/interp_cppyy.py
@@ -288,7 +288,7 @@
                 pass
 
         # only get here if all overloads failed ...
-        errmsg = 'None of the overloads matched:'
+        errmsg = 'none of the %d overloaded methods succeeded. Full details:' % len(self.functions)
         if hasattr(self.space, "fake"):     # FakeSpace fails errorstr (see below)
             raise OperationError(self.space.w_TypeError, self.space.wrap(errmsg))
         for i in range(len(self.functions)):
@@ -296,9 +296,11 @@
             try:
                 return cppyyfunc.call(cppthis, args_w)
             except OperationError, e:
-                errmsg += '\n\t'+e.errorstr(self.space)
+                errmsg += '\n  '+cppyyfunc.signature()+' =>\n'
+                errmsg += '    '+e.errorstr(self.space)
             except Exception, e:
-                errmsg += '\n\tException:'+str(e)
+                errmsg += '\n  '+cppyyfunc.signature()+' =>\n'
+                errmsg += '    Exception:'+str(e)
 
         raise OperationError(self.space.w_TypeError, self.space.wrap(errmsg))
 
diff --git a/pypy/module/cppyy/test/test_fragile.py b/pypy/module/cppyy/test/test_fragile.py
--- a/pypy/module/cppyy/test/test_fragile.py
+++ b/pypy/module/cppyy/test/test_fragile.py
@@ -172,8 +172,22 @@
             d.check(None)         # raises TypeError
             assert 0
         except TypeError, e:
+            assert "fragile::D::check()" in str(e)
             assert "TypeError: wrong number of arguments" in str(e)
 
+        try:
+            d.overload(None)      # raises TypeError
+            assert 0
+        except TypeError, e:
+            assert "fragile::D::overload()" in str(e)
+            assert "TypeError: wrong number of arguments" in str(e)
+            assert "fragile::D::overload(fragile::no_such_class*)" in str(e)
+            assert "TypeError: no converter available for type \"fragile::no_such_class*\"" in str(e)
+            assert "fragile::D::overload(char, int)" in str(e)
+            assert "TypeError: expected string, got NoneType object" in str(e)
+            assert "fragile::D::overload(int, fragile::no_such_class*)" in str(e)
+            assert "TypeError: unsupported operand type for int(): 'NoneType'" in str(e)
+
         j = fragile.J()
         assert fragile.J.method1.__doc__ == j.method1.__doc__
         assert j.method1.__doc__ == "fragile::J::method1(int, double)"


More information about the pypy-commit mailing list