对象在 python 的 protobuf 上没有属性 'add'
object has no attribute 'add' on python's protobuf
我想在 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
时,出现错误
Traceback (most recent call last): File "ndemo.py", line 8, in
base_request = contReq.baseRequest.add() AttributeError: 'BaseRequest' object has no attribute 'add'
repeated
字段只有 add()
,这就是重点。
在您的情况下,由于 baseRequest
是 required
,您应该直接将值直接分配给 BaseRequest
中的字段,例如:
contReq = ndemo_pb2.ContRequest()
contReq.baseRequest.key = "12345"
我想在 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
时,出现错误
Traceback (most recent call last): File "ndemo.py", line 8, in base_request = contReq.baseRequest.add() AttributeError: 'BaseRequest' object has no attribute 'add'
repeated
字段只有 add()
,这就是重点。
在您的情况下,由于 baseRequest
是 required
,您应该直接将值直接分配给 BaseRequest
中的字段,例如:
contReq = ndemo_pb2.ContRequest()
contReq.baseRequest.key = "12345"