Python EVAL() - AND 语句

Python EVAL() - AND statements

我正在尝试使用 EVAL() 同时计算两个语句,但我遇到了一些问题:

metrics_dict = {}

def testA(n):
    print ("testA done")
    global metrics_dict
    result = n**n
    metrics_dict["metricA"] = result
    return result

def testB(n):
    print ("testB done")
    global metrics_dict
    result = n**n
    metrics_dict["metricB"] = result
    return result

def testC(n):
    print ("testC done")
    global metrics_dict
    result = n**n
    metrics_dict["metricC"] = result
    return result

logic = "testA(2) > 10 and testB(3) > 0"

如果我 运行 像这样对“逻辑”进行评估:

x = eval(logic)

我得到“testA done”和 FALSE,我相信这是因为因为 testA 是 FALSE,所以 EVAL() 不会继续对 testB 进行第二次检查,此外我的 metrics_dict里面有 metricA,所以我的问题是,有没有办法强制 eval 遍历我的逻辑语句中的所有检查,我需要能够一直检查和记录这两个测试,是否无关紧要它是 FALSE,FALSE 或 FALSE,TRUE 或 TRUE,FALSE 或 TRUE,TRUE。

谢谢大家

与其搞乱 eval,您将无法回避 AND 的逻辑工作方式,您应该考虑将检查逻辑编码为独立语句的集合:

>>> logic = [testA(2) > 10, testB(3) > 0]
testA done
testB done
>>> logic
[False, True]

然后您仍然可以通过 all(logic) 或其他类似的归约得到最终结果。