首页 > 解决方案 > False Boolean 未在 proto3 Python 中显示

问题描述

我正在使用protoBuffer 3python没有bool正确显示字段。

entity_proto

message Foo {
    string id = 1;
    bool active = 3;
}

在 python 中设置值。

foo = entity_proto.Foo(id='id-123', active=True)
print(foo)
# id: id-123
# active: True

# But if you set the value False it does not show 'active' in print statement
foo = entity_proto.Foo(id='id-123', active=False)
print(foo)
# id: id-123

如果您尝试打印print(foo.active)输出,False那是可以的。主要问题是当Http trancoding我尝试打印时使用不console.log(foo.active)给我(语言:JavaScript) undefinedfalse

有人可以让我知道为什么它没有显示False价值。

标签: pythonprotocol-buffers

解决方案


Prototbuf 具有字段的默认值,例如布尔值 false、数字零或空字符串。

它不会打扰对它们进行编码,因为它会浪费空间和/或带宽(传输时)。这可能是它没有出现的原因。

检查这一点的一个好方法是设置id一个空字符串,看看它的行为是否相似:

foo = entity_proto.Foo(id='', active=True)
print(foo)
# active: True (I suspect).

解决方案实际上取决于它undefined的来源。两种 Javascript 都有一个真正的未定义值,在这种情况下,您可以使用 null/undefined 合并运算符:

console.log(foo.active ?? false)

或者,如果这个 HTTP 转码器正在执行类似创建文字“未定义”字符串的操作,您将不得不弄清楚如何将(可能的)None转换为“假”。


推荐阅读