@@ -225,6 +225,7 @@ def raise_exception(self, node, exc=None, msg='', expr=None, lineno=None):
225225
226226 err = ExceptionHolder (node , exc = exc , msg = msg , expr = self .expr , lineno = lineno )
227227 self ._interrupt = ast .Raise ()
228+
228229 self .error .append (err )
229230 if self .error_msg is None :
230231 self .error_msg = msg
@@ -301,14 +302,19 @@ def run(self, node, expr=None, lineno=None, with_raise=True):
301302
302303 # avoid too many repeated error messages (yes, this needs to be "2")
303304 if len (self .error ) > 2 :
304- error = [self .error [0 ]]
305- for err in self .error [1 :]:
306- le = error [- 1 ]
307- if err .exc != le .exc or err .expr != le .expr or err .msg != le .msg :
308- error .append (err )
309- self .error = error
305+ self ._remove_duplicate_errors ()
306+
310307 return None
311308
309+ def _remove_duplicate_errors (self ):
310+ """remove duplicate exceptions"""
311+ error = [self .error [0 ]]
312+ for err in self .error [1 :]:
313+ lerr = error [- 1 ]
314+ if err .exc != lerr .exc or err .expr != lerr .expr or err .msg != lerr .msg :
315+ error .append (err )
316+ self .error = error
317+
312318 def __call__ (self , expr , ** kw ):
313319 """Call class instance as function."""
314320 return self .eval (expr , ** kw )
@@ -343,6 +349,7 @@ def eval(self, expr, lineno=0, show_errors=True, raise_errors=False):
343349 errmsg = self .error [- 1 ].get_error ()[1 ]
344350 print (errmsg , file = self .err_writer )
345351 if raise_errors and len (self .error ) > 0 :
352+ self ._remove_duplicate_errors ()
346353 err = self .error [- 1 ]
347354 raise err .exc (err .get_error ()[1 ])
348355 return None
0 commit comments