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

Airflow任务返回码0但DAG失败,求正确退出实现方案

问题解决:Airflow任务用sys.exit(0)仍标记失败的处理方式

在Airflow的PythonOperator中,直接调用sys.exit(0)会触发SystemExit异常,Airflow会将未捕获的异常判定为任务失败,哪怕返回码是0,这就是你遇到的问题。以下是两种正确的实现方式:

方法1:直接返回(推荐)

不需要调用sys.exit,直接在逻辑分支里return即可,PythonOperator会将函数正常返回判定为任务成功:

if df.empty or df.isnull().all().all():
    print("All fields are empty. No update or creation required.")
    return  # 正常返回,任务标记为成功

方法2:抛出SkipException(适合需要明确标记任务跳过的场景)

如果希望任务被标记为「跳过」状态(而非成功),可以导入Airflow的SkipException并抛出,这种方式会让任务进入跳过状态,下游任务可根据触发规则决定是否执行:

from airflow.exceptions import SkipException

# 数据为空的判断逻辑
if df.empty or df.isnull().all().all():
    print("All fields are empty. No update or creation required.")
    raise SkipException("No valid data to process, skipping task execution")

为什么sys.exit不可行?

Airflow的PythonOperator执行时会捕获函数内抛出的异常,sys.exit()本质是抛出SystemExit异常,即便返回码为0,Airflow也会将其视为任务异常终止,从而标记失败。而直接return或抛出SkipException是Airflow规范的任务结束/跳过方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:13:17