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

Airflow DAG使用{{ var.value }}模板语法获取变量报错如何解决?

报错原因

{{ var.value.my_var }}属于Airflow的Jinja2模板语法,仅能在Operator支持模板渲染的字段中使用,会在DAG调度执行时由Airflow自动解析替换为实际值。你直接将该语法写在Python函数的业务代码里,Python解释器会将其识别为普通Python语法执行,自然找不到var这个内置对象,触发NameError报错。

解决方案

你可以从两种实现思路里选:

  • 直接用Python SDK取变量:就是你第一个函数的写法,直接在Python函数内调用Variable.get("my_var")取值即可,这也是官方推荐的在PythonOperator逻辑中取全局变量的方式,不需要使用模板语法。注意你描述里写的Variable.ger是笔误,正确写法为Variable.get。
  • 如果你一定要用模板语法传值:把模板变量写在PythonOperator支持模板渲染的op_kwargs参数中,由Airflow渲染完成后再传入函数,修改后的代码示例如下:
from airflow import DAG
from airflow.models import Variable
from airflow.operators.python import PythonOperator
import airflow.utils.dates

def display_variable():
    my_var = Variable.get("my_var")
    print('variable' + my_var)
    return my_var

# 新增参数接收渲染后的变量值
def display_variable1(my_var):
    print('variable' + my_var)
    return my_var

dag = DAG(
    dag_id="variable_dag", 
    start_date=airflow.utils.dates.days_ago(14),
    schedule_interval='@daily'
)

task = PythonOperator(
    task_id='display_variable', 
    python_callable=display_variable, 
    dag=dag
)

task1 = PythonOperator(
    task_id='display_variable1', 
    python_callable=display_variable1,
    # op_kwargs支持模板渲染,在此处写模板语法
    op_kwargs={"my_var": "{{ var.value.my_var }}"},
    dag=dag
)

task >> task1

如果你用的是其他支持模板的Operator(比如BashOperator、SparkSubmitOperator等),直接把模板语法写在对应支持渲染的字段(比如bash_command、application_args等)中即可,不需要额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:48:04