Geo*_*ler 3 python protocol-buffers
在 python 中开始使用 protobuf 我面临一个奇怪的问题:
一个简单的消息原型定义是:
syntax = "proto3";
package test;
message Message {
string message = 1;
string sender = 2;
}
Run Code Online (Sandbox Code Playgroud)
通过protoc -I . --python_out=generated message.protoPython生成和访问,如:
from generated.message_pb2 import Message
Run Code Online (Sandbox Code Playgroud)
然后我可以构造一条消息
m = Message()
m.sender = 'foo'
m.message = 'bar'
print(str(m))
Run Code Online (Sandbox Code Playgroud)
但反序列化不会返回结果
s_m = m.SerializeToString()
print(s_m) # prints fine
a = m.ParseFromString(s_m)
a.foo #fails with error - no attributes deserialized
Run Code Online (Sandbox Code Playgroud)
Ula*_*les 11
代替
a = m.ParseFromString(s_m)
a.foo
Run Code Online (Sandbox Code Playgroud)
做这个
a = m.FromString(s_m)
print a.sender
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做
m2 = Message()
m2.ParseFromString(s_m)
print m2.sender
Run Code Online (Sandbox Code Playgroud)
不同之处在于FromString返回从字符串反序列化的新对象,而ParseFromString解析字符串并设置对象上的字段。
| 归档时间: |
|
| 查看次数: |
5586 次 |
| 最近记录: |