Python协议缓冲区v3.5.1消息中存在未知字段

2024-05-16 06:57:15 发布

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

协议缓冲Python消息实现preserves unknown fields in messages as of v3.5.0。我注意到我可以使用message._unknown_fields来确定特定消息中是否存在未知字段。在

我有两个问题:

  1. m._unknown_fields给出了m中未知字段的值,但没有给出m的任何子字段的值。例如,如果m.a有未知字段,它们将出现在m.a._unknown_fields中,但不会出现在m._unknown_fields中。有没有方法可以确定消息或其子消息中是否有未知字段?我可以通过在每个节点上使用._unknown_fields查询来实现消息树的遍历,但这似乎有些过头了;我只想确定在解析消息期间是否遇到了任何未知字段。

  2. _unknown_fields的前缀_似乎表明这是一个私有/未记录的调用。是否有认可的方法来确定是否存在未知字段?


Tags: of方法in消息协议messagefields节点
1条回答
网友
1楼 · 发布于 2024-05-16 06:57:15
  1. 要想把破坏性降到最低,你几乎必须走下去。这些未知字段非常明确地属于它们所附加到的消息。在

    您还应该能够通过在最上面的消息上调用DiscardUnknownFields()并比较消息前后的ByteSize()来检测消息树的任何部分是否包含未知字段。如果该值减小,则以前有未知字段‘\(ツ)/’

    这将同样适用于C++编译扩展库,据我所知,它不提供任何可见的^ {< CD3>}属性。{cd4}如果你想知道他们的存在,如果你想知道他们的存在,你可以尝试使用。

  2. 我不认为在纯Python或编译版本的库中没有任何公共API来确定未知字段的存在。不管怎样,上面的方法仍然有效,批准的,如果有点奇怪的话。

相关问题 更多 >