You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Protobuf ListValue转换为Python列表?解决mypy类型报错

解决Protobuf ListValue转Python列表的mypy报错问题

正确转换方式

Protobuf的ListValue对象本身不可迭代,它的元素实际存储在values属性中,直接操作这个属性即可完成转换,且不会触发mypy报错:

方法1:直接转为Python列表

from google.protobuf.struct_pb2 import ListValue

my_list_value: ListValue = ...
my_list = list(my_list_value.values)  # 访问values属性获取可迭代的元素集合

方法2:循环遍历构建列表

from typing import List
from google.protobuf.struct_pb2 import ListValue, Value

prob_output_list: List[float] = []
for elt in my_list_value.values:
    # 显式将Protobuf的Value类型转为Python float类型
    prob_output_list.append(float(elt.number_value))

报错原因说明

  • ListValue类本身没有实现__iter__方法,因此直接对对象本身使用list()或循环遍历,会被mypy判定为不可迭代对象。
  • 它的values属性属于RepeatedCompositeFieldContainer类型,天然支持迭代和列表转换操作,mypy能正确识别该类型的可迭代性。

无需使用#pragma ignore

完全不需要通过忽略mypy报错的方式解决问题,通过访问values属性就能合规完成转换。如果需要将Protobuf的Value类型转为具体Python类型(如float),只需显式处理每个元素的类型转换,mypy也能识别这种合法操作。

内容的提问来源于stack exchange,提问作者information_interchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:10:42