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

Airflow使用SnowflakeLoadOperator报expected str not function错误咨询

错误根因

你在MonthlyBillingS3PartitionLatestFile类的formatted_partition_value属性中,直接将存储函数对象的self.source_resolver作为参数传给了os.path.split,没有执行函数调用操作。os.path.split只能接收字符串、字节或者路径类对象,无法处理函数对象,因此触发类型错误。

修复方案

方案1:直接调用传入的解析函数

修改formatted_partition_value属性逻辑,执行函数拿到返回的S3路径字符串:

@property
def formatted_partition_value(self):
    # 加括号执行source_resolver函数,获取返回的路径字符串
    source = self.source_resolver()
    prefix, filename = os.path.split(source)
    # 保留你后续原有逻辑

如果get_latest_io_monthly_billing_file_from_new_prefix需要传入参数,调用时同步传入即可,比如:

source = self.source_resolver(bucket=self.bucket, base_path=self.location_base)

方案2:兼容路径字符串/解析函数两种传参场景

如果希望source_resolver参数同时支持直接传固定路径、传动态解析函数两种用法,可以加可调用判断:

@property
def formatted_partition_value(self):
    source = self.source_resolver
    # 如果是可调用对象,先执行拿到返回值
    if callable(source):
        source = source()
    prefix, filename = os.path.split(source)

验证注意点

  • 确认get_latest_io_monthly_billing_file_from_new_prefix的执行时机是在Airflow任务运行阶段,而非DAG解析阶段,避免函数依赖的S3连接、Airflow变量还未加载就执行报错
  • 测试函数返回值是否为合法的S3路径字符串,避免空值、格式错误的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 23:06:01