python - 在 python 3 中无法访问(嵌套)枚举类型(proto3)
问题描述
我无法访问琐碎的协议缓冲区消息中的(嵌套)枚举。我尝试了任何一种方式,嵌套或分离DataNodeManagement
!:
syntax = "proto3";
message DataNodeManagement {
string name = 1;
string id = 2;
string origin = 3;
ConnectionType con_type = 4;
enum ConnectionType {
UNKNOWN = 0;
MQTT = 1;
}
}
我正在使用此代码在我的消息中填充数据:
config = data_node_pb2.DataNodeManagement()
config.name = "Scanner1"
config.id = key
config.origin = "PC1"
config.con_type = data_node_pb2.ConnectionType.MQTT
# or
# config.con_type = data_node_pb2.DataNodeManagement.ConnectionType.MQTT
datasource.advertise_data_node(config.SerializeToString())
它抱怨:
Traceback (most recent call last):
File "scanner-connector.py", line 144, in <module>
config.con_type = data_node_pb2.ConnectionType.MQTT
AttributeError: 'EnumTypeWrapper' object has no attribute 'MQTT'
各自:
Traceback (most recent call last):
File "scanner-connector.py", line 144, in <module>
config.con_type = data_node_pb2.DataNodeManagement.ConnectionType.MQTT
AttributeError: type object 'DataNodeManagement' has no attribute 'ConnectionType'
我正在使用这些版本:
python --version
Python 3.6.6 :: Anaconda custom (64-bit)
protoc --version
libprotoc 3.6.1
作为初学者,我有什么特别之处吗?
解决方案
您必须跳过枚举名称才能访问枚举中的值。从protocol-buffers python-tutorial中可以看出,枚举是在消息中定义的
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phones = 4;
}
在阅读消息部分中,枚举是通过以下方式访问的
import addressbook_pb2
addressbook_pb2.Person.MOBILE
所以在你的例子中应该是data_node_pb2.DataNodeManagement.MQTT
推荐阅读
- sql-server - 将 EF Core 迁移更改为不同的默认所有者
- javascript - 当在其中使用带有 R 闪亮的 pickerInput() 时,是否有防止 dropdown() 关闭的选项?
- c# - 在 LinqToEntities 中,如何将动态列名传递给 DbFunctions.Like
- leaflet - 如何在 LeafLet 中创建基本地图?
- c++ - 二分查找查找小于或等于另一个元素的最大元素
- python - 迭代字段列表时的 Django.forms.fields.booleanfield 对象
- reactjs - 如果在我的情况下我的状态属性很少,如何将类组件重新制作为功能和状态为 useState?
- c# - 字符串匹配搜索的执行时间和比较次数
- html - 使用 python 获取具有动态扩展容器的页面的完整 HTML
- lua - roblox 中的数据问题