【问题标题】:Protobuf strange behaviour with enums枚举的 Protobuf 奇怪行为
【发布时间】:2020-02-21 11:33:29
【问题描述】:

我有以下 protobuf 定义:

syntax = "proto3";                                                                                                                                                                                                                                                                                                                                                                                                              
message ACL {                                                                                                                                                                                                   
  enum Foo {
    BAR = 0;
    BAZ = 1;
  }
  enum Corpus {
    UNIVERSAL = 0;
    WEB = 1;
  }
  Foo foo = 1;
  Corpus corpus = 2;
}

当我在 Python 中使用时,它会存储/显示 corpus 字段而不是 foo 字段:

>>> import acl_pb2
>>> p = acl_pb2.ACL(foo="BAR", corpus="WEB")
>>> p
corpus: WEB

【问题讨论】:

标签: python protocol-buffers proto


【解决方案1】:

在 proto3 中,零是默认值,默认值是零。不传输默认值(零),因此:没有为foo = "Bar" 发送实际数据,因为那是零。但是,您的模型应该能够发现 foo 存在并且具有 Bar/0 的隐含值。如果没有,这听起来像是对 python 代码生成的好奇。

【讨论】:

  • 谢谢,现在我只需要弄清楚为什么另一个代码没有使用默认值 (0)
  • @anteatersa 作为提示:为“未知/无”条目保留第一个枚举位置(其值必须为零)可能很有用
猜你喜欢
  • 2012-11-15
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多