簡體   English   中英

python protobuf無法反序列化消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM