[英]python protobuf can't deserialize message
在Python中使用protobuf入門,我遇到一個奇怪的問題:
一個簡單的消息原型定義是:
syntax = "proto3";
package test;
message Message {
string message = 1;
string sender = 2;
}
通過protoc -I . --python_out=generated message.proto
生成protoc -I . --python_out=generated message.proto
protoc -I . --python_out=generated message.proto
並在Python中進行訪問,例如:
from generated.message_pb2 import Message
然后我可以構造一條消息
m = Message()
m.sender = 'foo'
m.message = 'bar'
print(str(m))
但反序列化不會返回結果
s_m = m.SerializeToString()
print(s_m) # prints fine
a = m.ParseFromString(s_m)
a.foo #fails with error - no attributes deserialized
代替
a = m.ParseFromString(s_m)
a.foo
做這個
a = m.FromString(s_m)
print a.sender
或者,您可以這樣做
m2 = Message()
m2.ParseFromString(s_m)
print m2.sender
區別在於FromString
返回從字符串反序列化的新對象,而ParseFromString
解析字符串並設置對象上的字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.