Skip to content

Commit 7e2050d

Browse files
committed
make non-boolean return values from comparison operators behave like Python - not immediately testing as bool
1 parent 1cd191f commit 7e2050d

File tree

1 file changed

+9
-14
lines changed

1 file changed

+9
-14
lines changed

asteval/asteval.py

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -651,23 +651,18 @@ def on_compare(self, node): # ('left', 'ops', 'comparators')
651651
"""comparison operators, including chained comparisons (a<b<c)"""
652652
lval = self.run(node.left)
653653
results = []
654+
multi = (len(node.ops) > 1)
654655
for oper, rnode in zip(node.ops, node.comparators):
655656
rval = self.run(rnode)
656657
ret = op2func(oper)(lval, rval)
657-
results.append(ret)
658-
try:
659-
if not ret:
660-
break
661-
except ValueError:
662-
pass
663-
lval = rval
664-
if len(results) == 1:
665-
out = results[0]
666-
else:
667-
out = True
668-
for ret in results:
669-
out = out and ret
670-
return out
658+
if multi:
659+
results.append(ret)
660+
if not all(results):
661+
return False
662+
lval = rval
663+
if multi:
664+
ret = all(results)
665+
return ret
671666

672667
def _printer(self, *out, **kws):
673668
"""Generic print function."""

0 commit comments

Comments
 (0)