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

Dagster 1.7.10中含ins与context的Asset定义报错排查

Dagster 1.7.10 同时用ins和AssetExecutionContext触发保留关键字错误的解决办法

问题场景

在Dagster 1.7.10版本中,定义同时包含其他资产输入(通过ins参数指定)和AssetExecutionContext的资产时,会触发以下错误:

dagster._core.errors.DagsterInvalidDefinitionError: "context" is not a valid name in Dagster. It conflicts with a Dagster or python reserved keyword.

复现代码:

from dagster import asset, AssetIn, AssetExecutionContext, Definitions

@asset
def parent_asset(context: AssetExecutionContext) -> None:
    return 'hi there!'

@asset(ins={'parent_asset': AssetIn('parent_asset')})
def my_asset(
    parent_asset: str,
    context: AssetExecutionContext,
) -> None:
    print(parent_asset + ' whatever')

Definitions(assets=[parent_asset, my_asset])

注意:单独使用context或单独使用ins时代码均可正常运行,仅两者同时使用时触发错误。

错误原因

问题出在Dagster的参数识别逻辑:当显式通过ins指定资产输入时,Dagster会默认将函数的所有参数视为待关联的输入资产,此时context会被误判为输入名称。但context是Dagster内部预留的关键字(用于传递执行上下文),因此直接触发命名冲突错误。

解决方案

方案1:移除ins,利用自动资产关联

如果上游资产名称与函数参数名一致,无需显式指定ins,Dagster会自动根据参数名关联上游资产,同时正确识别context为系统上下文:

from dagster import asset, AssetExecutionContext, Definitions

@asset
def parent_asset(context: AssetExecutionContext) -> None:
    return 'hi there!'

@asset
def my_asset(
    parent_asset: str,
    context: AssetExecutionContext,
) -> None:
    print(parent_asset + ' whatever')

Definitions(assets=[parent_asset, my_asset])

方案2:保留ins,调整context参数位置

如果必须使用ins(比如上游资产名与参数名不一致),将context参数放在所有输入参数的最前面,Dagster会优先识别它为系统上下文,而非待关联的输入资产:

from dagster import asset, AssetIn, AssetExecutionContext, Definitions

@asset
def parent_asset(context: AssetExecutionContext) -> None:
    return 'hi there!'

@asset(ins={'parent': AssetIn('parent_asset')})
def my_asset(
    context: AssetExecutionContext,
    parent: str,
) -> None:
    print(parent + ' whatever')

Definitions(assets=[parent_asset, my_asset])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:14:54