Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAneesh Dogra <lionaneesh@gmail.com>2012-12-04 15:38:49 (GMT)
committer Aneesh Dogra <lionaneesh@gmail.com>2012-12-04 15:45:01 (GMT)
commiteb9d99a849d7b45fad771bdeb646280c40a0d101 (patch)
treed4f80a056410eb96373babc94a240c0921cbe9ea
parentfa0bf8ee2d79bd7ae73410a4de8d051221a02e52 (diff)
Show more descriptive error messages (Parse Errors).sugar-0.94
Fix #2386
-rw-r--r--astparser.py19
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: