You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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方法的返回值,并非谓词或规则执行出错的表现。

验证规则执行的方法

如果要确认规则是否触发、事实是否正确声明,可以通过两种方式验证:

  1. 在规则方法内添加打印语句:
@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)
  1. 在run执行后查询引擎中的事实:
_engine.run()
# 遍历并打印所有GoodSymbolFact类型的事实
for fact in _engine.facts:
    if isinstance(fact, GoodSymbolFact):
        print("已声明的合格标的事实:", fact)

内容的提问来源于stack exchange,提问作者user1187968

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:48:30