对象没有属性'添加'关于python的protobuf

时间:2015-08-31 10:10:56

标签: python protocol-buffers

我想在python上的protobuf API上测试嵌套消息。

我的原型ndemo.proto文件是:

package ndemotest;

message BaseRequest
{
    required bytes Key = 1;
}

message ContRequest
{
    required BaseRequest baseRequest = 1;
    optional string Url = 2;
}

我的python ndemo.py代码是:

import binascii
import ndemo_pb2


contReq = ndemo_pb2.ContRequest()
contReq.Url="www.google.com"

base_request = contReq.baseRequest.add()
base_request.Key="12345"


packed_data = contReq.SerializeToString()

print 'sending "%s"' % binascii.hexlify(packed_data) 

当我将脚本作为python ndemo.py运行时,出现了错误

  

回溯(最近一次呼叫最后一次):文件" ndemo.py",第8行,在          base_request = contReq.baseRequest.add()AttributeError:' BaseRequest'对象没有属性'添加'

1 个答案:

答案 0 :(得分:6)

add()字段只有repeated,这就是它的重点。

在您的情况下,由于baseRequestrequired,您只需将该值直接指定给BaseRequest中的字段,例如:

contReq = ndemo_pb2.ContRequest()
contReq.baseRequest.key = "12345"