From: Vivien Maisonneuve Date: Mon, 18 Aug 2014 16:08:28 +0000 (+0200) Subject: Simplify class verification in LinExpr.fromstring() X-Git-Tag: 1.0~64 X-Git-Url: https://scm.cri.mines-paristech.fr/git/linpy.git/commitdiff_plain/4e641aa915e5641b9d710187618fd0e3c5c42e18?ds=sidebyside Simplify class verification in LinExpr.fromstring() --- diff --git a/linpy/linexprs.py b/linpy/linexprs.py index 82d75d0..cf2a980 100644 --- a/linpy/linexprs.py +++ b/linpy/linexprs.py @@ -348,7 +348,10 @@ class LinExpr: # add implicit multiplication operators, e.g. '5x' -> '5*x' string = LinExpr._RE_NUM_VAR.sub(r'\1*\2', string) tree = ast.parse(string, 'eval') - return cls._fromast(tree) + expr = cls._fromast(tree) + if not isinstance(expr, cls): + raise SyntaxError('invalid syntax') + return expr def __repr__(self): string = '' @@ -493,16 +496,6 @@ class Symbol(LinExpr): """ return Dummy(self.name) - @classmethod - def _fromast(cls, node): - if isinstance(node, ast.Module) and len(node.body) == 1: - return cls._fromast(node.body[0]) - elif isinstance(node, ast.Expr): - return cls._fromast(node.value) - elif isinstance(node, ast.Name): - return Symbol(node.id) - raise SyntaxError('invalid syntax') - def __repr__(self): return self.name