Skip to content

Commit 36dc5f1

Browse files
committed
more tests and updates for exception handling
1 parent 84ab7d7 commit 36dc5f1

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

asteval/asteval.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

tests/test_asteval.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,6 +1541,8 @@ def test_raise_errors_unknown_symbol(nested):
15411541
except NameError:
15421542
saw_exception = True
15431543
assert saw_exception
1544+
assert len(interp.error) > 0
1545+
assert interp.error[0].exc == NameError
15441546

15451547

15461548
@pytest.mark.parametrize("nested", [False, True])

0 commit comments

Comments
 (0)