diff --git a/bpython/autocomplete.py b/bpython/autocomplete.py index 34bea9fcc..110c0d762 100644 --- a/bpython/autocomplete.py +++ b/bpython/autocomplete.py @@ -342,7 +342,7 @@ def safe_eval(expr, namespace): try: obj = eval(expr, namespace) return obj - except (NameError, AttributeError) as e: + except (NameError, AttributeError, SyntaxError) as e: # If debugging safe_eval, raise this! # raise e return SafeEvalFailed diff --git a/bpython/test/test_autocomplete.py b/bpython/test/test_autocomplete.py index cbe4b389b..f6fdba3b4 100644 --- a/bpython/test/test_autocomplete.py +++ b/bpython/test/test_autocomplete.py @@ -34,6 +34,12 @@ def test_cw(self): self.assertEqual(self.repl.cw(), 'datetime') """ +class TestSafeEval(unittest.TestCase): + def test_catches_syntax_error(self): + try: + autocomplete.safe_eval('1re',{}) + except: + self.fail('safe_eval raises an error') # make some fake files? Dependency inject? mock? class TestFilenameCompletion(unittest.TestCase):