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

构造Python Protobuf的Foo实例时遭遇位置参数错误求助

问题原因

你遇到的错误根源在于KeyValuePair的value字段赋值错误:value='value1'这种写法相当于直接用字符串作为位置参数调用Value的构造函数,而Protobuf生成的Python消息类构造器不允许使用位置参数,必须通过关键字参数指定具体的oneof字段。

修正方案

需要先显式构造Value实例,指定对应的oneof字段(比如strValue),再将其传给KeyValuePair的value参数。

修正后的代码如下:

# 先构造Value实例
value1 = Value(strValue='value1')
value2 = Value(strValue='value2')

# 构造KeyValuePair实例
kv1 = KeyValuePair(key='key1', value=value1)
kv2 = KeyValuePair(key='key2', value=value2)

# 最后构造Foo实例
my_foo = Foo(num=123, features=[kv1, kv2])

或者写成链式构造的简化形式:

my_foo = Foo(
    num=123,
    features=[
        KeyValuePair(key='key1', value=Value(strValue='value1')),
        KeyValuePair(key='key2', value=Value(strValue='value2'))
    ]
)
补充说明

你的Protobuf定义中Value是包含oneof的消息类型,不能直接用原始字符串/整数赋值,必须明确指定oneof中的具体字段(strValue或intValue)来创建Value实例,再传递给上层的KeyValuePair。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:45:08