diff options
-rw-r--r-- | astparser.py | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/astparser.py b/astparser.py index 12506eb..8a6659d 100644 --- a/astparser.py +++ b/astparser.py @@ -43,8 +43,9 @@ range from a to b") class ParserError(Exception): """Parent class for exceptions raised by the parser.""" - def __init__(self, msg, start, end=None): + def __init__(self, msg, start, eqn, end=None): self._msg = msg + self.eqn = eqn self.set_range(start, end) def get_range(self): @@ -64,11 +65,13 @@ class ParserError(Exception): class ParseError(ParserError): """Class for error during parsing.""" - def __init__(self, msg, start, end=None): - ParserError.__init__(self, msg, start, end) + def __init__(self, msg, start, eqn, end=None): + ParserError.__init__(self, msg, start, eqn, end) def __str__(self): - msg = _("Error at %d") % (self._range[0] + 1) + msg = _("Error at '%s', position: %d") % \ + (self.eqn[self._range[0] - 1 : self._range[1] - 1], + self._range[0]) if self._msg is not None and len(self._msg) > 0: msg += ": %s" % (self._msg) return msg @@ -76,11 +79,13 @@ class ParseError(ParserError): class RuntimeError(ParserError): """Class for error during executing.""" - def __init__(self, msg, start, end=None): + def __init__(self, msg, start, eqn, end=None): ParserError.__init__(self, msg, start, end) def __str__(self): - msg = _("Error at %d") % (self._range[0] + 1) + msg = _("Error at '%s', position: %d") % \ + (self.eqn[self._range[0] - 1 : self._range[1] - 1], + self._range[0]) if self._msg is not None and len(self._msg) > 0: msg += ": %s" % (self._msg) return msg @@ -594,7 +599,7 @@ class AstParser: tree = compile(eqn, '<string>', 'exec', ast.PyCF_ONLY_AST) except SyntaxError, e: msg = _('Parse error') - raise ParseError(msg, e.offset - 1) + raise ParseError(msg, e.offset - 1, eqn) if isinstance(tree, ast.Module): if len(tree.body) != 1: |