gez*_*nta 28 python protocol-buffers
我正在使用协议缓冲区python lib来发送数据,但它有一些问题,所以
Traceback (most recent call last):
File "test_message.py", line 17, in <module>
ptask.task = task
File "build\bdist.win32\egg\google\protobuf\internal\python_message.py", line
513, in setter
AttributeError: Assignment not allowed to composite field "_task" in protocol message object.
Run Code Online (Sandbox Code Playgroud)
src如下:
原型文件:
message task {
required int32 id = 1;
required string msg = 2;
}
message task_info {
required task task = 1;
}
Run Code Online (Sandbox Code Playgroud)
python代码:
task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info()
ptask.task = task # this line happen the runtime error
Run Code Online (Sandbox Code Playgroud)
Joh*_*ane 66
试试CopyFrom:
ptask.task.CopyFrom(task)
Run Code Online (Sandbox Code Playgroud)
Mar*_*ard 23
我不知道协议缓冲区,但我看了一下文档,它说:
您无法为嵌入的消息字段分配值.相反,为子消息中的任何字段分配值意味着在父节点中设置消息字段.
所以我假设这应该工作:
task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info()
ptask.task.id = task.id
ptask.task.msg = task.msg
Run Code Online (Sandbox Code Playgroud)
Ale*_*nda 17
我也是协议缓冲区的新手,面临着同样的问题.我发现这种方法很有帮助.
我认为它应该工作:
task = yacc.task()
task.id = 1000
task.msg = u"test"
ptask = yacc.task_info()
ptask.task.MergeFrom(task)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22740 次 |
| 最近记录: |