代码之家  ›  专栏  ›  技术社区  ›  kee

airflow.exceptions.AirflowException:初始化运算符时使用关键字参数

  •  1
  • kee  · 技术社区  · 6 年前

    我在Ubuntu的Python 2.7中使用的是airlow版本的1.9.2。我试图继承 ParentOperator 类,该类本身工作正常,并创建一个名为 ChildOperator . 但是当我创造一个 儿童经营者 例如,我认为某些关键字参数在这里丢失或弄乱了,我得到这个错误:

    airlow.exceptions.airlowexception:在以下情况下使用关键字参数 初始化运算符

    下面是一个简单的例子:

    class ParentOperator(BaseOperator, SkipMixin):
    
        @apply_defaults
        def __init__(self,
                 conn_id,
                 object,
                 args={},
                 s3_conn_id=None,
                 s3_key=None,
                 s3_bucket=None,
                 fields=None,
                 *args,
                 **kwargs
                 ):
    
            super(ParentOperator, self).__init__(*args, **kwargs)
            ...
    
    
    class ChildOperator(ParentOperator):
    
        @apply_defaults
        def __init__(self,
                 conn_id,
                 object,
                 args={},
                 s3_conn_id=None,
                 s3_key=None,
                 s3_bucket=None,
                 fields=None,
                 *args,
                 **kwargs
                 ):
    
            args=...
            super(ChildOperator, self).__init__(
                conn_id,
                object,
                args=args,
                s3_conn_id=s3_conn_id,
                s3_key=s3_key,
                s3_bucket=s3_bucket,
                fields=fields,
                *args,
                **kwargs
            )
    
    ...
    
    myobjc = ChildOperator(
        conn_id="my_default",
        object=table,
        args={},
        s3_conn_id='s3_postgres_dump',
        s3_key=s3_key,
        s3_bucket=s3_bucket,
        dag=dag,
        task_id="task1"
    )
    

    知道是什么导致这个错误吗?这更像是Python特有的问题吗?

    1 回复  |  直到 5 年前
        1
  •  4
  •   sophros    5 年前

    __init__ 功能 ChildOperator 需要具有如下所有关键字参数(对于 conn_id object ):

    super(ChildOperator, self).__init__(
            conn_id=conn_id,
            object=object,
            args=args,
            s3_conn_id=s3_conn_id,
            s3_key=s3_key,
            s3_bucket=s3_bucket,
            fields=fields,
            *args,
            **kwargs
    )