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

Prefect运行RunGreatExpectationsValidation任务抛出异常问题求助

问题原因

Prefect 0.15.9版本内置的RunGreatExpectationsValidation任务适配的是GE 0.12.9及更早版本的逻辑,任务内部默认GE的get_checkpoint方法返回可下标访问的字典类型。从GE 0.12.10版本开始,Checkpoint重构为类对象,不管是V3的Checkpoint还是V2的LegacyCheckpoint都不再支持[]方式读取属性,你尝试过的GE 0.12.10、0.13.43都属于该版本区间,所以会触发TypeError: 'Checkpoint' object is not subscriptable报错。你本地直接执行GE命令正常是因为GE本身的CLI适配了新对象结构,只有Prefect的旧版本任务逻辑不兼容。

解决方案

方案1:升级Prefect版本(推荐)

Prefect从0.15.10版本开始修复了GE兼容性问题,你可以直接将Prefect升级到0.15.10及以上的0.x版本,无需修改业务代码即可解决问题:

pip install prefect>=0.15.10

注意不要直接升级到Prefect 2.x,2.x的流任务API和1.x不兼容,需要调整整体流代码结构。

方案2:降级GE版本

如果你不能升级Prefect版本,可以将GE降级到0.12.9及之前的版本,该版本区间的Checkpoint返回格式为字典,适配Prefect 0.15.9的内置任务:

pip install great-expectations==0.12.9

方案3:自定义重写任务逻辑

如果项目必须固定使用Prefect 0.15.9和GE 0.12.10及以上版本,可以自定义重写任务逻辑,适配新的Checkpoint对象结构,示例代码如下:

from prefect.tasks.great_expectations import RunGreatExpectationsValidation

class CustomRunGEValidation(RunGreatExpectationsValidation):
    def run(self, **kwargs):
        ge_context = self._get_context(**kwargs)
        ge_checkpoint = ge_context.get_checkpoint(name=kwargs.get("checkpoint_name"))
        # 直接调用Checkpoint对象的run方法,跳过原任务不兼容的下标读取逻辑
        checkpoint_run_result = ge_checkpoint.run()
        # 沿用原任务的结果校验逻辑
        self._check_validation_run_result(checkpoint_run_result)
        return checkpoint_run_result

# 用自定义任务替换原官方任务即可,流代码其他部分无需调整
validation_task = CustomRunGEValidation()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:54:03