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

修复Python中gRPC列表对象的TypeError: No positional arguments allowed错误

解决gRPC Repeated字段赋值的"No position arguments are allowed"错误

错误原因

你用request.partnered_wh.add(partnered_wh)直接传位置参数,而gRPC生成的add()方法不接受位置参数,只能通过关键字参数初始化字段,或者先创建空实例再合并已有对象。

最佳解决方案

最简洁高效的方式是直接用extend()方法,一次性将Python列表中的所有对象添加到gRPC的repeated字段中,不需要循环:

def get_warehouses(
    self,
    base_wh: create_attributes_pb2.CreateAttributes,
    partnered_whs: List[create_attributes_pb2.CreateAttributes],
) -> int:
    start_time = utcnow().replace(tzinfo=None)
    request = get_warehouses_request_pb2.GetWarehousesRequest(
        base_wh=base_wh,
    )
    # 直接用extend批量添加
    request.partnered_wh.extend(partnered_whs)

替代方案(逐个添加)

如果需要逐个处理每个对象,可以先创建空的CreateAttributes实例,再用MergeFrom()合并已有对象,避免传位置参数:

for partnered_wh in partnered_whs:
    new_wh = request.partnered_wh.add()  # 无参数调用add()创建空实例
    new_wh.MergeFrom(partnered_wh)        # 合并已有对象的字段

关于直接赋值

gRPC生成的repeated字段是RepeatedCompositeFieldContainer类型,不能直接用=赋值,必须通过extend()或add()方法来添加元素,这是因为它是绑定到proto消息的特殊容器,需要维护内部一致性和序列化规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:42:46