inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Lớp học thành thạo Airflow

Sử dụng decorator @task

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

75

nemo

14 câu hỏi đã được viết

0

 

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

 

로그는 다음과 같습니다.

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'?

 

python 데이터-엔지니어링 airflow 카카오공채-개발

Câu trả lời 3

0

nemo

으아 그런데 재현이 안되네요..

착각이었나 봅니다...

0

hyunjinkim

안녕하세요 ㅇㅅㅇ님!

혹시 작성하신 코드를 볼 수 있을까요? 그리고 질문의 내용이 제가 잘 이해가 안가서요. 😂

어떤 점이 궁금하신지 조금만 더 알려주시면 감사하겠습니다 😀

0

communityai8509

안녕하세요, 인프런 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()

유사한 문제 해결 참고

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

pykrx 회원제 전환으로 인한 실습 불가

0

83

2

수료증 발급

0

77

3

에러 발생 관련 질문드립니다.

0

73

2

vscode 작업화면에 오류가 발생하지 않습니다.

0

66

2

plugins 폴더 생성

0

69

2

WSL에서 git push 가 안되요 ㅠ

0

106

2

chatGPT&Airflow로 블로그 자동 포스팅하기 는 Deprecated 가 필요합니다.

0

62

2

github에 회원가입이 안되는데 원인이 뭔지 모르겠어요 ㅠ

0

673

2

설치중인데 venv를 꼭 써야할까요?

0

116

2

설치 버전 관련 질문입니다.

0

65

1

우분투 버전 다운받아야하는데 어떤걸로 설치해야할까요?

0

59

1

DAG 만들기 중 airflow 패키지 로드 에러

0

103

2

3.0에서도 수업노트가 성립하는지 확인 부탁드립니다!

0

94

3

email operator 오류 관련

0

61

2

plugins 폴더 관련

0

89

2

bash operator 관련 문의입니다

0

76

3

스케쥴러 - DAG 파싱 부하 줄이는 과정 질문

0

77

2

Dags refresh 주기 관련 질문

0

121

2

wsl 관련 질문입니다.!

0

71

2

macOS에서 docker 설치

0

92

2

템플릿 변수에 대한 오류

0

52

2

custom_image 디렉토리 문의드립니다.

0

48

2

ETL 인터뷰 관련 문의

0

98

2

섹션 9. Connection & Hook - 50강 관련 질문

0

90

2