"Protobuf的HasField函数需要什么参数?"

2024-06-23 02:53:30 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下结构

message Fly {
  uint32 dtime = 1;
}

但是HasField函数不起作用:

>>> d.ListFields()[0][0].name
'dtime'
>>> d.ListFields()[0][0].full_name
'Fly.dtime'
>>> 
>>> d.HasField('dtime')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/.../lib/python2.7/site-packages/google/protobuf/internal/python_message.py", line 825, in HasField
    raise ValueError(error_msg % field_name)
ValueError: Protocol message has no non-repeated submessage field "dtime"
>>> d.HasField('Fly.dtime')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/.../lib/python2.7/site-packages/google/protobuf/internal/python_message.py", line 825, in HasField
    raise ValueError(error_msg % field_name)
ValueError: Protocol message has no non-repeated submessage field "Fly.dtime"

HasField需要什么参数?


Tags: nameinfieldmessagemostlinecallfile
1条回答
网友
1楼 · 发布于 2024-06-23 02:53:30

我想你误解了HasField()的作用。它不检查protobuf类型是否通过名称定义特定字段。它所做的是检查给定消息字段的名称时,该字段是否为当前实例设置。

正如documentation所指出的,在proto3中为非消息字段调用HasField将引发一个错误。

相关问题 更多 >