From 4e641aa915e5641b9d710187618fd0e3c5c42e18 Mon Sep 17 00:00:00 2001 From: Vivien Maisonneuve Date: Mon, 18 Aug 2014 18:08:28 +0200 Subject: [PATCH] Simplify class verification in LinExpr.fromstring() --- linpy/linexprs.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) 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 -- 2.20.1