강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

ㅇㅅㅇ님의 프로필 이미지
ㅇㅅㅇ

작성한 질문수

Airflow 마스터 클래스

@task 데코레이터 사용하기

task_id 사용법이 뭔가 바뀐 것 같습니다.

작성

·

15

0

 

  • @task만 쓰거나

  • inner 함수에 return을 하거나

  • multiple_outputs=True 옵션(이건 안해봄)

으로 해결되는 것 같습니다.

 

로그는 다음과 같습니다.

Timestamp: 2025-11-01 19:54:50

Traceback (most recent call last):
File "<attrs generated methods airflow.sdk.bases.decorator._TaskDecorator>", line 37, in init
_setattr('multiple_outputs', __attr_factory_multiple_outputs(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/sdk/bases/decorator.py", line 328, in _infer_multiple_outputs
if "return" not in self.function.annotations:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'str' object has no attribute 'annotations'. Did you mean: 'contains'?

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. ㅇㅅㅇ님.

현재 겪고 계신 문제는 Airflow에서 @task 데코레이터 사용 시 multiple_outputs 옵션 및 함수의 리턴 타입과 관련하여 발생하는 것 같습니다. 주어진 코드 내에서 함수의 annotations 프로퍼티에 접근하려 할 때 발생하는 오류로 보입니다. 이 오류는 데코레이터가 함수의 반환 타입을 확인하려고 할 때 적절한 함수 정의가 이루어지지 않아서 나타나는 경우가 있습니다.

문제의 원인

AttributeError는 주로 다음과 같은 상황에서 발생할 수 있습니다:
1. 잘못된 함수 정의: 함수의 주석(annotation)이 올바르게 정의되지 않았거나, 데코레이터가 예상하는 형식과 일치하지 않을 경우입니다.
2. Airflow 버전 변화: 최신 버전에서는 multiple_outputs=True 옵션을 사용할 때 함수 리턴 타입을 명확히 해야 하는 구조적 변화가 있었을 수 있습니다.

해결 방법

  • 함수 리턴 타입 명시: 문제가 된 함수를 정의할 때, 리턴 타입을 명시하여 @task 데코레이터가 예상하는 리턴 타입을 알 수 있도록 합니다. 예를 들어, def my_function() -> dict: 와 같이 명시합니다.

  • 다른 task_id 사용법 확인: 최근의 Airflow 업데이트에 따라 @task 데코레이터, 특히 multiple_outputs 관련 기능 사용법이 변경되었을 수 있으니 공식 문서를 확인하여 최신 정보를 반영합니다.

예제 코드 수정

아래는 수정된 예제 코드입니다. 리턴 타입을 명시하여 오류를 방지할 수 있습니다:

from airflow import DAG
from airflow.decorators import task
import pendulum

with DAG(dag_id='example_dag', start_date=pendulum.datetime(2023, 1, 1), schedule_interval=None) as dag:

    @task(multiple_outputs=True)
    def my_function() -> dict:
        return {'key1': 'value1', 'key2': 'value2'}

    my_function()

유사한 문제 해결 참고

저는 질문자님의 이해를 돕고자 유사한 지식공유자님의 기존 답변을 참고하여 이 답변을 구성하였습니다. 추가적으로 궁금한 점이 있거나 문제가 지속된다면 질문을 이어가 주세요. 곧 지식공유자께서 더 명확한 답변을 제공해 주실 것입니다. 🙏

ㅇㅅㅇ님의 프로필 이미지
ㅇㅅㅇ

작성한 질문수

질문하기