Airflow 2.3.4从XCom字符串提取子串返回未知字符问题排查
故障原因分析
核心问题:混淆了Jinja模板字符串与实际Python变量
你写的代码里,fy变量存储的是未渲染的Jinja模板语法字符串,而非XCom返回的实际值:
- 代码中
fy = "{{ ti.xcom_pull(dag_id='" + DAG_ID + "', task_ids='fiscal_yr_week')[1][3] }}"这一行,得到的是一个形如"{{ ti.xcom_pull(dag_id='your_dag_id', task_ids='fiscal_yr_week')[1][3] }}"的字符串,Airflow并没有对这个模板进行渲染——这段代码是在Python层面直接赋值,没有触发Jinja的模板解析逻辑。 - 后续的
xcom_yr = f"""{fy}"""只是对这个模板字符串做了无意义的格式化,结果还是原模板字符串。 - 最后执行
yr = xcom_yr[2:4]时,是对模板字符串本身切片:模板字符串的前几个字符是{{ ti...,索引2的位置是空格,索引3的位置是t,所以切片结果就是带空格的' t',这就是你看到的错误输出。
额外问题:XCom取值的索引逻辑错误
你代码里ti.xcom_pull(...)[1][3]的索引写法也存在问题:如果XCom返回的是字符串"2022",那么[1]会取到第二个字符'0',再调用[3]会直接报错(单个字符没有索引3);如果XCom返回的是嵌套结构,这个索引逻辑也需要重新确认,但这不是当前返回t的直接原因。
内容的提问来源于stack exchange,提问作者codninja0908
相关产品推荐
相关产品推荐

