构造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
相关产品推荐
相关产品推荐

