Author: Amaury Forgeot d'Arc <amaur...@gmail.com>
Branch: stdlib-3.2.5
Changeset: r70426:81af5323708c
Date: 2014-04-03 23:54 +0200
http://bitbucket.org/pypy/pypy/changeset/81af5323708c/

Log:    CPython issue1692335: Exception.args is also set in __new__

        (for naive exception subclasses which don't call super().__init__)

diff --git a/pypy/module/exceptions/interp_exceptions.py 
b/pypy/module/exceptions/interp_exceptions.py
--- a/pypy/module/exceptions/interp_exceptions.py
+++ b/pypy/module/exceptions/interp_exceptions.py
@@ -208,8 +208,10 @@
     if basecls is None:
         basecls = cls
     def descr_new_base_exception(space, w_subtype, __args__):
+        args_w, kwds_w = __args__.unpack()  # ignore kwds
         exc = space.allocate_instance(cls, w_subtype)
         basecls.__init__(exc, space)
+        exc.args_w = args_w
         return space.wrap(exc)
     descr_new_base_exception.func_name = 'descr_new_' + cls.__name__
     return interp2app(descr_new_base_exception)
diff --git a/pypy/module/exceptions/test/test_exc.py 
b/pypy/module/exceptions/test/test_exc.py
--- a/pypy/module/exceptions/test/test_exc.py
+++ b/pypy/module/exceptions/test/test_exc.py
@@ -40,6 +40,14 @@
         x = X(x=8)
         assert x.x == 8
 
+    def test_args(self):
+        class X(Exception):
+            def __init__(self, x=3):
+                self.x = x
+
+        assert X(8).args == (8,)
+        assert X(x=8).args == ()
+
     def test_exc(self):
         assert issubclass(Exception, BaseException)
         assert isinstance(Exception(), Exception)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to