You need to enable JavaScript to run this app. Python查询DynamoDB价格报'str' object is not callable如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Python查询DynamoDB价格报'str' object is not callable如何解决

报错核心原因

本质是变量名与Python内置函数重名,触发了标识符引用覆盖:

  • Python内置的max()、min()是可调用的原生工具函数,用于计算可迭代对象的最值。你在代码中直接将计算得到的最值赋值给了和内置函数完全同名的max、min变量:
    max = max(priceList)
    min = min(priceList)
    
  • 第一次调用函数时,代码执行到赋值语句右侧的max(priceList)逻辑时,标识符max还未被本地赋值覆盖,会沿作用域链找到真正的内置max()函数,正常计算出字符串类型的最高价格,将结果赋值给max变量后正常返回。
  • 第一次赋值完成后,max的引用就从原本可调用的内置函数,变成了字符串类型的价格值。第二次执行同一行代码时,右侧的max已经是字符串对象,不是可调用的函数,自然会抛出'str' object is not callable的类型错误。
修复方案
  • 直接替换与内置函数重名的变量名,避免覆盖原生函数引用,将原代码中的max、min改为语义明确且不冲突的命名:
    for i,product in enumerate(response['Items']):
      print(i)
      priceList.append(product['attr']['price'])
    # 替换原有重名变量
    max_price = max(priceList)
    min_price = min(priceList)
    
    data = {
       "pk": "PRODUCT",
       "sk": item['sk'],
       "min": min_price,
       "max": max_price
    }
    
  • 补充健壮性处理:DynamoDB查询可能返回空结果,建议在计算最值前判断priceList是否为空,避免空列表触发ValueError:
    if not priceList:
        return json.dumps({"pk": "PRODUCT", "sk": item['sk'], "min": None, "max": None})
    max_price = max(priceList)
    min_price = min(priceList)
    
  • 额外逻辑优化:你存储的价格是字符串类型,直接通过字符串比较得到的最值可能不符合数值大小逻辑(比如字符串排序时"9"会大于"100"),建议在加入priceList前将字符串转为数值类型计算,得到结果后再转回字符串存入返回结构,避免计算偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 04:24:04