[pypy-commit] pypy default: less duplication

pjenvey noreply at buildbot.pypy.org
Mon Feb 3 22:32:35 CET 2014


Author: Philip Jenvey <pjenvey at underboss.org>
Branch: 
Changeset: r69060:bb2c16ce58d9
Date: 2014-02-03 13:05 -0800
http://bitbucket.org/pypy/pypy/changeset/bb2c16ce58d9/

Log:	less duplication

diff --git a/pypy/interpreter/astcompiler/ast.py b/pypy/interpreter/astcompiler/ast.py
--- a/pypy/interpreter/astcompiler/ast.py
+++ b/pypy/interpreter/astcompiler/ast.py
@@ -8,6 +8,12 @@
 from rpython.tool.sourcetools import func_with_new_name
 
 
+def raise_attriberr(space, w_obj, name):
+    raise operationerrfmt(space.w_AttributeError,
+                          "'%T' object has no attribute '%s'",
+                          w_obj, name)
+
+
 def check_string(space, w_obj):
     if not (space.isinstance_w(w_obj, space.w_str) or
             space.isinstance_w(w_obj, space.w_unicode)):
@@ -2793,7 +2799,7 @@
 
 def Module_get_body(space, w_self):
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -2834,7 +2840,7 @@
 
 def Interactive_get_body(space, w_self):
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -2879,7 +2885,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     return space.wrap(w_self.body)
 
 def Expression_set_body(space, w_self, w_new_value):
@@ -2922,7 +2928,7 @@
 
 def Suite_get_body(space, w_self):
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -2967,7 +2973,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'lineno')
+        raise_attriberr(space, w_self, 'lineno')
     return space.wrap(w_self.lineno)
 
 def stmt_set_lineno(space, w_self, w_new_value):
@@ -2988,7 +2994,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 2:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'col_offset')
+        raise_attriberr(space, w_self, 'col_offset')
     return space.wrap(w_self.col_offset)
 
 def stmt_set_col_offset(space, w_self, w_new_value):
@@ -3018,7 +3024,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'name')
+        raise_attriberr(space, w_self, 'name')
     return space.wrap(w_self.name)
 
 def FunctionDef_set_name(space, w_self, w_new_value):
@@ -3039,7 +3045,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'args')
+        raise_attriberr(space, w_self, 'args')
     return space.wrap(w_self.args)
 
 def FunctionDef_set_args(space, w_self, w_new_value):
@@ -3056,7 +3062,7 @@
 
 def FunctionDef_get_body(space, w_self):
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -3072,7 +3078,7 @@
 
 def FunctionDef_get_decorator_list(space, w_self):
     if not w_self.initialization_state & 32:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'decorator_list')
+        raise_attriberr(space, w_self, 'decorator_list')
     if w_self.w_decorator_list is None:
         if w_self.decorator_list is None:
             list_w = []
@@ -3121,7 +3127,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'name')
+        raise_attriberr(space, w_self, 'name')
     return space.wrap(w_self.name)
 
 def ClassDef_set_name(space, w_self, w_new_value):
@@ -3138,7 +3144,7 @@
 
 def ClassDef_get_bases(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'bases')
+        raise_attriberr(space, w_self, 'bases')
     if w_self.w_bases is None:
         if w_self.bases is None:
             list_w = []
@@ -3154,7 +3160,7 @@
 
 def ClassDef_get_body(space, w_self):
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -3170,7 +3176,7 @@
 
 def ClassDef_get_decorator_list(space, w_self):
     if not w_self.initialization_state & 32:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'decorator_list')
+        raise_attriberr(space, w_self, 'decorator_list')
     if w_self.w_decorator_list is None:
         if w_self.decorator_list is None:
             list_w = []
@@ -3220,7 +3226,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return space.wrap(w_self.value)
 
 def Return_set_value(space, w_self, w_new_value):
@@ -3263,7 +3269,7 @@
 
 def Delete_get_targets(space, w_self):
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'targets')
+        raise_attriberr(space, w_self, 'targets')
     if w_self.w_targets is None:
         if w_self.targets is None:
             list_w = []
@@ -3304,7 +3310,7 @@
 
 def Assign_get_targets(space, w_self):
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'targets')
+        raise_attriberr(space, w_self, 'targets')
     if w_self.w_targets is None:
         if w_self.targets is None:
             list_w = []
@@ -3324,7 +3330,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return space.wrap(w_self.value)
 
 def Assign_set_value(space, w_self, w_new_value):
@@ -3373,7 +3379,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'target')
+        raise_attriberr(space, w_self, 'target')
     return space.wrap(w_self.target)
 
 def AugAssign_set_target(space, w_self, w_new_value):
@@ -3396,7 +3402,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'op')
+        raise_attriberr(space, w_self, 'op')
     return operator_to_class[w_self.op - 1]()
 
 def AugAssign_set_op(space, w_self, w_new_value):
@@ -3419,7 +3425,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return space.wrap(w_self.value)
 
 def AugAssign_set_value(space, w_self, w_new_value):
@@ -3468,7 +3474,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'dest')
+        raise_attriberr(space, w_self, 'dest')
     return space.wrap(w_self.dest)
 
 def Print_set_dest(space, w_self, w_new_value):
@@ -3487,7 +3493,7 @@
 
 def Print_get_values(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'values')
+        raise_attriberr(space, w_self, 'values')
     if w_self.w_values is None:
         if w_self.values is None:
             list_w = []
@@ -3507,7 +3513,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'nl')
+        raise_attriberr(space, w_self, 'nl')
     return space.wrap(w_self.nl)
 
 def Print_set_nl(space, w_self, w_new_value):
@@ -3555,7 +3561,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'target')
+        raise_attriberr(space, w_self, 'target')
     return space.wrap(w_self.target)
 
 def For_set_target(space, w_self, w_new_value):
@@ -3578,7 +3584,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'iter')
+        raise_attriberr(space, w_self, 'iter')
     return space.wrap(w_self.iter)
 
 def For_set_iter(space, w_self, w_new_value):
@@ -3597,7 +3603,7 @@
 
 def For_get_body(space, w_self):
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -3613,7 +3619,7 @@
 
 def For_get_orelse(space, w_self):
     if not w_self.initialization_state & 32:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'orelse')
+        raise_attriberr(space, w_self, 'orelse')
     if w_self.w_orelse is None:
         if w_self.orelse is None:
             list_w = []
@@ -3662,7 +3668,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'test')
+        raise_attriberr(space, w_self, 'test')
     return space.wrap(w_self.test)
 
 def While_set_test(space, w_self, w_new_value):
@@ -3681,7 +3687,7 @@
 
 def While_get_body(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -3697,7 +3703,7 @@
 
 def While_get_orelse(space, w_self):
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'orelse')
+        raise_attriberr(space, w_self, 'orelse')
     if w_self.w_orelse is None:
         if w_self.orelse is None:
             list_w = []
@@ -3745,7 +3751,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'test')
+        raise_attriberr(space, w_self, 'test')
     return space.wrap(w_self.test)
 
 def If_set_test(space, w_self, w_new_value):
@@ -3764,7 +3770,7 @@
 
 def If_get_body(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -3780,7 +3786,7 @@
 
 def If_get_orelse(space, w_self):
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'orelse')
+        raise_attriberr(space, w_self, 'orelse')
     if w_self.w_orelse is None:
         if w_self.orelse is None:
             list_w = []
@@ -3828,7 +3834,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'context_expr')
+        raise_attriberr(space, w_self, 'context_expr')
     return space.wrap(w_self.context_expr)
 
 def With_set_context_expr(space, w_self, w_new_value):
@@ -3851,7 +3857,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'optional_vars')
+        raise_attriberr(space, w_self, 'optional_vars')
     return space.wrap(w_self.optional_vars)
 
 def With_set_optional_vars(space, w_self, w_new_value):
@@ -3870,7 +3876,7 @@
 
 def With_get_body(space, w_self):
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -3917,7 +3923,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'type')
+        raise_attriberr(space, w_self, 'type')
     return space.wrap(w_self.type)
 
 def Raise_set_type(space, w_self, w_new_value):
@@ -3940,7 +3946,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'inst')
+        raise_attriberr(space, w_self, 'inst')
     return space.wrap(w_self.inst)
 
 def Raise_set_inst(space, w_self, w_new_value):
@@ -3963,7 +3969,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'tback')
+        raise_attriberr(space, w_self, 'tback')
     return space.wrap(w_self.tback)
 
 def Raise_set_tback(space, w_self, w_new_value):
@@ -4008,7 +4014,7 @@
 
 def TryExcept_get_body(space, w_self):
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -4024,7 +4030,7 @@
 
 def TryExcept_get_handlers(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'handlers')
+        raise_attriberr(space, w_self, 'handlers')
     if w_self.w_handlers is None:
         if w_self.handlers is None:
             list_w = []
@@ -4040,7 +4046,7 @@
 
 def TryExcept_get_orelse(space, w_self):
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'orelse')
+        raise_attriberr(space, w_self, 'orelse')
     if w_self.w_orelse is None:
         if w_self.orelse is None:
             list_w = []
@@ -4085,7 +4091,7 @@
 
 def TryFinally_get_body(space, w_self):
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -4101,7 +4107,7 @@
 
 def TryFinally_get_finalbody(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'finalbody')
+        raise_attriberr(space, w_self, 'finalbody')
     if w_self.w_finalbody is None:
         if w_self.finalbody is None:
             list_w = []
@@ -4148,7 +4154,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'test')
+        raise_attriberr(space, w_self, 'test')
     return space.wrap(w_self.test)
 
 def Assert_set_test(space, w_self, w_new_value):
@@ -4171,7 +4177,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'msg')
+        raise_attriberr(space, w_self, 'msg')
     return space.wrap(w_self.msg)
 
 def Assert_set_msg(space, w_self, w_new_value):
@@ -4215,7 +4221,7 @@
 
 def Import_get_names(space, w_self):
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'names')
+        raise_attriberr(space, w_self, 'names')
     if w_self.w_names is None:
         if w_self.names is None:
             list_w = []
@@ -4260,7 +4266,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'module')
+        raise_attriberr(space, w_self, 'module')
     return space.wrap(w_self.module)
 
 def ImportFrom_set_module(space, w_self, w_new_value):
@@ -4280,7 +4286,7 @@
 
 def ImportFrom_get_names(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'names')
+        raise_attriberr(space, w_self, 'names')
     if w_self.w_names is None:
         if w_self.names is None:
             list_w = []
@@ -4300,7 +4306,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'level')
+        raise_attriberr(space, w_self, 'level')
     return space.wrap(w_self.level)
 
 def ImportFrom_set_level(space, w_self, w_new_value):
@@ -4348,7 +4354,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     return space.wrap(w_self.body)
 
 def Exec_set_body(space, w_self, w_new_value):
@@ -4371,7 +4377,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'globals')
+        raise_attriberr(space, w_self, 'globals')
     return space.wrap(w_self.globals)
 
 def Exec_set_globals(space, w_self, w_new_value):
@@ -4394,7 +4400,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'locals')
+        raise_attriberr(space, w_self, 'locals')
     return space.wrap(w_self.locals)
 
 def Exec_set_locals(space, w_self, w_new_value):
@@ -4439,7 +4445,7 @@
 
 def Global_get_names(space, w_self):
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'names')
+        raise_attriberr(space, w_self, 'names')
     if w_self.w_names is None:
         if w_self.names is None:
             list_w = []
@@ -4484,7 +4490,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return space.wrap(w_self.value)
 
 def Expr_set_value(space, w_self, w_new_value):
@@ -4582,7 +4588,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'lineno')
+        raise_attriberr(space, w_self, 'lineno')
     return space.wrap(w_self.lineno)
 
 def expr_set_lineno(space, w_self, w_new_value):
@@ -4603,7 +4609,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 2:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'col_offset')
+        raise_attriberr(space, w_self, 'col_offset')
     return space.wrap(w_self.col_offset)
 
 def expr_set_col_offset(space, w_self, w_new_value):
@@ -4633,7 +4639,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'op')
+        raise_attriberr(space, w_self, 'op')
     return boolop_to_class[w_self.op - 1]()
 
 def BoolOp_set_op(space, w_self, w_new_value):
@@ -4652,7 +4658,7 @@
 
 def BoolOp_get_values(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'values')
+        raise_attriberr(space, w_self, 'values')
     if w_self.w_values is None:
         if w_self.values is None:
             list_w = []
@@ -4698,7 +4704,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'left')
+        raise_attriberr(space, w_self, 'left')
     return space.wrap(w_self.left)
 
 def BinOp_set_left(space, w_self, w_new_value):
@@ -4721,7 +4727,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'op')
+        raise_attriberr(space, w_self, 'op')
     return operator_to_class[w_self.op - 1]()
 
 def BinOp_set_op(space, w_self, w_new_value):
@@ -4744,7 +4750,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'right')
+        raise_attriberr(space, w_self, 'right')
     return space.wrap(w_self.right)
 
 def BinOp_set_right(space, w_self, w_new_value):
@@ -4793,7 +4799,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'op')
+        raise_attriberr(space, w_self, 'op')
     return unaryop_to_class[w_self.op - 1]()
 
 def UnaryOp_set_op(space, w_self, w_new_value):
@@ -4816,7 +4822,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'operand')
+        raise_attriberr(space, w_self, 'operand')
     return space.wrap(w_self.operand)
 
 def UnaryOp_set_operand(space, w_self, w_new_value):
@@ -4864,7 +4870,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'args')
+        raise_attriberr(space, w_self, 'args')
     return space.wrap(w_self.args)
 
 def Lambda_set_args(space, w_self, w_new_value):
@@ -4885,7 +4891,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     return space.wrap(w_self.body)
 
 def Lambda_set_body(space, w_self, w_new_value):
@@ -4933,7 +4939,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'test')
+        raise_attriberr(space, w_self, 'test')
     return space.wrap(w_self.test)
 
 def IfExp_set_test(space, w_self, w_new_value):
@@ -4956,7 +4962,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     return space.wrap(w_self.body)
 
 def IfExp_set_body(space, w_self, w_new_value):
@@ -4979,7 +4985,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'orelse')
+        raise_attriberr(space, w_self, 'orelse')
     return space.wrap(w_self.orelse)
 
 def IfExp_set_orelse(space, w_self, w_new_value):
@@ -5024,7 +5030,7 @@
 
 def Dict_get_keys(space, w_self):
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'keys')
+        raise_attriberr(space, w_self, 'keys')
     if w_self.w_keys is None:
         if w_self.keys is None:
             list_w = []
@@ -5040,7 +5046,7 @@
 
 def Dict_get_values(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'values')
+        raise_attriberr(space, w_self, 'values')
     if w_self.w_values is None:
         if w_self.values is None:
             list_w = []
@@ -5083,7 +5089,7 @@
 
 def Set_get_elts(space, w_self):
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'elts')
+        raise_attriberr(space, w_self, 'elts')
     if w_self.w_elts is None:
         if w_self.elts is None:
             list_w = []
@@ -5128,7 +5134,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'elt')
+        raise_attriberr(space, w_self, 'elt')
     return space.wrap(w_self.elt)
 
 def ListComp_set_elt(space, w_self, w_new_value):
@@ -5147,7 +5153,7 @@
 
 def ListComp_get_generators(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'generators')
+        raise_attriberr(space, w_self, 'generators')
     if w_self.w_generators is None:
         if w_self.generators is None:
             list_w = []
@@ -5193,7 +5199,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'elt')
+        raise_attriberr(space, w_self, 'elt')
     return space.wrap(w_self.elt)
 
 def SetComp_set_elt(space, w_self, w_new_value):
@@ -5212,7 +5218,7 @@
 
 def SetComp_get_generators(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'generators')
+        raise_attriberr(space, w_self, 'generators')
     if w_self.w_generators is None:
         if w_self.generators is None:
             list_w = []
@@ -5258,7 +5264,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'key')
+        raise_attriberr(space, w_self, 'key')
     return space.wrap(w_self.key)
 
 def DictComp_set_key(space, w_self, w_new_value):
@@ -5281,7 +5287,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return space.wrap(w_self.value)
 
 def DictComp_set_value(space, w_self, w_new_value):
@@ -5300,7 +5306,7 @@
 
 def DictComp_get_generators(space, w_self):
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'generators')
+        raise_attriberr(space, w_self, 'generators')
     if w_self.w_generators is None:
         if w_self.generators is None:
             list_w = []
@@ -5347,7 +5353,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'elt')
+        raise_attriberr(space, w_self, 'elt')
     return space.wrap(w_self.elt)
 
 def GeneratorExp_set_elt(space, w_self, w_new_value):
@@ -5366,7 +5372,7 @@
 
 def GeneratorExp_get_generators(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'generators')
+        raise_attriberr(space, w_self, 'generators')
     if w_self.w_generators is None:
         if w_self.generators is None:
             list_w = []
@@ -5412,7 +5418,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return space.wrap(w_self.value)
 
 def Yield_set_value(space, w_self, w_new_value):
@@ -5459,7 +5465,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'left')
+        raise_attriberr(space, w_self, 'left')
     return space.wrap(w_self.left)
 
 def Compare_set_left(space, w_self, w_new_value):
@@ -5478,7 +5484,7 @@
 
 def Compare_get_ops(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'ops')
+        raise_attriberr(space, w_self, 'ops')
     if w_self.w_ops is None:
         if w_self.ops is None:
             list_w = []
@@ -5494,7 +5500,7 @@
 
 def Compare_get_comparators(space, w_self):
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'comparators')
+        raise_attriberr(space, w_self, 'comparators')
     if w_self.w_comparators is None:
         if w_self.comparators is None:
             list_w = []
@@ -5542,7 +5548,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'func')
+        raise_attriberr(space, w_self, 'func')
     return space.wrap(w_self.func)
 
 def Call_set_func(space, w_self, w_new_value):
@@ -5561,7 +5567,7 @@
 
 def Call_get_args(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'args')
+        raise_attriberr(space, w_self, 'args')
     if w_self.w_args is None:
         if w_self.args is None:
             list_w = []
@@ -5577,7 +5583,7 @@
 
 def Call_get_keywords(space, w_self):
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'keywords')
+        raise_attriberr(space, w_self, 'keywords')
     if w_self.w_keywords is None:
         if w_self.keywords is None:
             list_w = []
@@ -5597,7 +5603,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 32:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'starargs')
+        raise_attriberr(space, w_self, 'starargs')
     return space.wrap(w_self.starargs)
 
 def Call_set_starargs(space, w_self, w_new_value):
@@ -5620,7 +5626,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 64:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'kwargs')
+        raise_attriberr(space, w_self, 'kwargs')
     return space.wrap(w_self.kwargs)
 
 def Call_set_kwargs(space, w_self, w_new_value):
@@ -5673,7 +5679,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return space.wrap(w_self.value)
 
 def Repr_set_value(space, w_self, w_new_value):
@@ -5720,7 +5726,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'n')
+        raise_attriberr(space, w_self, 'n')
     return w_self.n
 
 def Num_set_n(space, w_self, w_new_value):
@@ -5765,7 +5771,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 's')
+        raise_attriberr(space, w_self, 's')
     return w_self.s
 
 def Str_set_s(space, w_self, w_new_value):
@@ -5810,7 +5816,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return space.wrap(w_self.value)
 
 def Attribute_set_value(space, w_self, w_new_value):
@@ -5833,7 +5839,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'attr')
+        raise_attriberr(space, w_self, 'attr')
     return space.wrap(w_self.attr)
 
 def Attribute_set_attr(space, w_self, w_new_value):
@@ -5854,7 +5860,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'ctx')
+        raise_attriberr(space, w_self, 'ctx')
     return expr_context_to_class[w_self.ctx - 1]()
 
 def Attribute_set_ctx(space, w_self, w_new_value):
@@ -5903,7 +5909,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return space.wrap(w_self.value)
 
 def Subscript_set_value(space, w_self, w_new_value):
@@ -5926,7 +5932,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'slice')
+        raise_attriberr(space, w_self, 'slice')
     return space.wrap(w_self.slice)
 
 def Subscript_set_slice(space, w_self, w_new_value):
@@ -5949,7 +5955,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'ctx')
+        raise_attriberr(space, w_self, 'ctx')
     return expr_context_to_class[w_self.ctx - 1]()
 
 def Subscript_set_ctx(space, w_self, w_new_value):
@@ -5998,7 +6004,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'id')
+        raise_attriberr(space, w_self, 'id')
     return space.wrap(w_self.id)
 
 def Name_set_id(space, w_self, w_new_value):
@@ -6019,7 +6025,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'ctx')
+        raise_attriberr(space, w_self, 'ctx')
     return expr_context_to_class[w_self.ctx - 1]()
 
 def Name_set_ctx(space, w_self, w_new_value):
@@ -6063,7 +6069,7 @@
 
 def List_get_elts(space, w_self):
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'elts')
+        raise_attriberr(space, w_self, 'elts')
     if w_self.w_elts is None:
         if w_self.elts is None:
             list_w = []
@@ -6083,7 +6089,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'ctx')
+        raise_attriberr(space, w_self, 'ctx')
     return expr_context_to_class[w_self.ctx - 1]()
 
 def List_set_ctx(space, w_self, w_new_value):
@@ -6128,7 +6134,7 @@
 
 def Tuple_get_elts(space, w_self):
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'elts')
+        raise_attriberr(space, w_self, 'elts')
     if w_self.w_elts is None:
         if w_self.elts is None:
             list_w = []
@@ -6148,7 +6154,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'ctx')
+        raise_attriberr(space, w_self, 'ctx')
     return expr_context_to_class[w_self.ctx - 1]()
 
 def Tuple_set_ctx(space, w_self, w_new_value):
@@ -6197,7 +6203,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return w_self.value
 
 def Const_set_value(space, w_self, w_new_value):
@@ -6315,7 +6321,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'lower')
+        raise_attriberr(space, w_self, 'lower')
     return space.wrap(w_self.lower)
 
 def Slice_set_lower(space, w_self, w_new_value):
@@ -6338,7 +6344,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 2:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'upper')
+        raise_attriberr(space, w_self, 'upper')
     return space.wrap(w_self.upper)
 
 def Slice_set_upper(space, w_self, w_new_value):
@@ -6361,7 +6367,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'step')
+        raise_attriberr(space, w_self, 'step')
     return space.wrap(w_self.step)
 
 def Slice_set_step(space, w_self, w_new_value):
@@ -6406,7 +6412,7 @@
 
 def ExtSlice_get_dims(space, w_self):
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'dims')
+        raise_attriberr(space, w_self, 'dims')
     if w_self.w_dims is None:
         if w_self.dims is None:
             list_w = []
@@ -6451,7 +6457,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return space.wrap(w_self.value)
 
 def Index_set_value(space, w_self, w_new_value):
@@ -6722,7 +6728,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'target')
+        raise_attriberr(space, w_self, 'target')
     return space.wrap(w_self.target)
 
 def comprehension_set_target(space, w_self, w_new_value):
@@ -6745,7 +6751,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 2:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'iter')
+        raise_attriberr(space, w_self, 'iter')
     return space.wrap(w_self.iter)
 
 def comprehension_set_iter(space, w_self, w_new_value):
@@ -6764,7 +6770,7 @@
 
 def comprehension_get_ifs(space, w_self):
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'ifs')
+        raise_attriberr(space, w_self, 'ifs')
     if w_self.w_ifs is None:
         if w_self.ifs is None:
             list_w = []
@@ -6811,7 +6817,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'lineno')
+        raise_attriberr(space, w_self, 'lineno')
     return space.wrap(w_self.lineno)
 
 def excepthandler_set_lineno(space, w_self, w_new_value):
@@ -6832,7 +6838,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 2:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'col_offset')
+        raise_attriberr(space, w_self, 'col_offset')
     return space.wrap(w_self.col_offset)
 
 def excepthandler_set_col_offset(space, w_self, w_new_value):
@@ -6862,7 +6868,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'type')
+        raise_attriberr(space, w_self, 'type')
     return space.wrap(w_self.type)
 
 def ExceptHandler_set_type(space, w_self, w_new_value):
@@ -6885,7 +6891,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'name')
+        raise_attriberr(space, w_self, 'name')
     return space.wrap(w_self.name)
 
 def ExceptHandler_set_name(space, w_self, w_new_value):
@@ -6904,7 +6910,7 @@
 
 def ExceptHandler_get_body(space, w_self):
     if not w_self.initialization_state & 16:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'body')
+        raise_attriberr(space, w_self, 'body')
     if w_self.w_body is None:
         if w_self.body is None:
             list_w = []
@@ -6947,7 +6953,7 @@
 
 def arguments_get_args(space, w_self):
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'args')
+        raise_attriberr(space, w_self, 'args')
     if w_self.w_args is None:
         if w_self.args is None:
             list_w = []
@@ -6967,7 +6973,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 2:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'vararg')
+        raise_attriberr(space, w_self, 'vararg')
     return space.wrap(w_self.vararg)
 
 def arguments_set_vararg(space, w_self, w_new_value):
@@ -6991,7 +6997,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 4:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'kwarg')
+        raise_attriberr(space, w_self, 'kwarg')
     return space.wrap(w_self.kwarg)
 
 def arguments_set_kwarg(space, w_self, w_new_value):
@@ -7011,7 +7017,7 @@
 
 def arguments_get_defaults(space, w_self):
     if not w_self.initialization_state & 8:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'defaults')
+        raise_attriberr(space, w_self, 'defaults')
     if w_self.w_defaults is None:
         if w_self.defaults is None:
             list_w = []
@@ -7060,7 +7066,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'arg')
+        raise_attriberr(space, w_self, 'arg')
     return space.wrap(w_self.arg)
 
 def keyword_set_arg(space, w_self, w_new_value):
@@ -7081,7 +7087,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 2:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'value')
+        raise_attriberr(space, w_self, 'value')
     return space.wrap(w_self.value)
 
 def keyword_set_value(space, w_self, w_new_value):
@@ -7129,7 +7135,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 1:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'name')
+        raise_attriberr(space, w_self, 'name')
     return space.wrap(w_self.name)
 
 def alias_set_name(space, w_self, w_new_value):
@@ -7150,7 +7156,7 @@
         if w_obj is not None:
             return w_obj
     if not w_self.initialization_state & 2:
-        raise operationerrfmt(space.w_AttributeError, "'%T' object has no attribute '%s'", w_self, 'asname')
+        raise_attriberr(space, w_self, 'asname')
     return space.wrap(w_self.asname)
 
 def alias_set_asname(space, w_self, w_new_value):
diff --git a/pypy/interpreter/astcompiler/tools/asdl_py.py b/pypy/interpreter/astcompiler/tools/asdl_py.py
--- a/pypy/interpreter/astcompiler/tools/asdl_py.py
+++ b/pypy/interpreter/astcompiler/tools/asdl_py.py
@@ -409,8 +409,7 @@
             self.emit("    if w_obj is not None:", 1)
             self.emit("        return w_obj", 1)
         self.emit("if not w_self.initialization_state & %s:" % (flag,), 1)
-        self.emit("raise operationerrfmt(space.w_AttributeError, \"'%%T' object has no attribute '%%s'\", w_self, '%s')" %
-                  (field.name,), 2)
+        self.emit("raise_attriberr(space, w_self, '%s')" % (field.name,), 2)
         if field.seq:
             self.emit("if w_self.w_%s is None:" % (field.name,), 1)
             self.emit("if w_self.%s is None:" % (field.name,), 2)
@@ -546,6 +545,12 @@
 from rpython.tool.sourcetools import func_with_new_name
 
 
+def raise_attriberr(space, w_obj, name):
+    raise operationerrfmt(space.w_AttributeError,
+                          \"'%T' object has no attribute '%s'\",
+                          w_obj, name)
+
+
 def check_string(space, w_obj):
     if not (space.isinstance_w(w_obj, space.w_str) or
             space.isinstance_w(w_obj, space.w_unicode)):


More information about the pypy-commit mailing list