Experta规则引擎输出异常值None,P谓词函数应用是否正确?
问题分析与解答
P谓词应用正确性
你的代码中P谓词的使用是正确的:
- P谓词接收的lambda函数参数
x对应匹配到的QuoteFact实例,通过x.price能正确获取到声明的价格值100.00,float(x.price) > 1.00的判断逻辑成立,规则accept会被正常触发,GoodSymbolFact也会被成功声明。
输出None的原因
_engine.run()方法本身的返回值就是None,这是Experta规则引擎的设计特性——run仅负责执行匹配的规则,不会返回任何结果。你看到的None是run方法的返回值,并非谓词或规则执行出错的表现。
验证规则执行的方法
如果要确认规则是否触发、事实是否正确声明,可以通过两种方式验证:
- 在规则方法内添加打印语句:
@Rule(QuoteFact(P(lambda x: float(x.price) > 1.00))) def accept(self, quote_fact): print("规则accept已触发") good_symbol_fact = GoodSymbolFact(symbol=quote_fact.symbol) self.declare(good_symbol_fact)
- 在
run执行后查询引擎中的事实:
_engine.run() # 遍历并打印所有GoodSymbolFact类型的事实 for fact in _engine.facts: if isinstance(fact, GoodSymbolFact): print("已声明的合格标的事实:", fact)
内容的提问来源于stack exchange,提问作者user1187968
相关产品推荐
相关产品推荐

