인프런 커뮤니티 질문&답변
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()
유사한 문제 해결 참고
- Airflow
@taskdecorator documentation에서 최신 업데이트 및 사용법 가이드를 확인하세요.
저는 질문자님의 이해를 돕고자 유사한 지식공유자님의 기존 답변을 참고하여 이 답변을 구성하였습니다. 추가적으로 궁금한 점이 있거나 문제가 지속된다면 질문을 이어가 주세요. 곧 지식공유자께서 더 명확한 답변을 제공해 주실 것입니다. 🙏





