协议缓冲Python消息实现preserves unknown fields in messages as of v3.5.0。我注意到我可以使用message._unknown_fields
来确定特定消息中是否存在未知字段。在
我有两个问题:
m._unknown_fields
给出了m
中未知字段的值,但没有给出m
的任何子字段的值。例如,如果m.a
有未知字段,它们将出现在m.a._unknown_fields
中,但不会出现在m._unknown_fields
中。有没有方法可以确定消息或其子消息中是否有未知字段?我可以通过在每个节点上使用._unknown_fields
查询来实现消息树的遍历,但这似乎有些过头了;我只想确定在解析消息期间是否遇到了任何未知字段。
_unknown_fields
的前缀_
似乎表明这是一个私有/未记录的调用。是否有认可的方法来确定是否存在未知字段?
要想把破坏性降到最低,你几乎必须走下去。这些未知字段非常明确地属于它们所附加到的消息。在
您还应该能够通过在最上面的消息上调用
DiscardUnknownFields()
并比较消息前后的ByteSize()
来检测消息树的任何部分是否包含未知字段。如果该值减小,则以前有未知字段‘\(ツ)/’这将同样适用于C++编译扩展库,据我所知,它不提供任何可见的^ {< CD3>}属性。{cd4}如果你想知道他们的存在,如果你想知道他们的存在,你可以尝试使用。
我不认为在纯Python或编译版本的库中没有任何公共API来确定未知字段的存在。不管怎样,上面的方法仍然有效,是批准的,如果有点奇怪的话。
相关问题 更多 >
编程相关推荐