如何让attrs对list中每个元素执行float转换而非传入整个列表?
解决attrs列表元素批量转换的问题
你当前的报错是因为直接把整个列表传入float函数,而float只能处理单个字符串或数字。attrs内置了converters.each_item()工具,不用自定义转换器就能实现对列表每个元素的转换。
修正后的代码如下:
import attrs from attrs import converters @attrs.define(kw_only=True) class A: values: list[float] = attrs.field(converter=converters.each_item(float)) # 测试代码 instance = A(values=["1.1", "2.2", "3.3"]) print(instance.values) # 输出: [1.1, 2.2, 3.3]
converters.each_item(float)会生成一个专用转换器,它会遍历输入的可迭代对象,将每个元素逐个传入float函数完成转换,最后返回转换后的列表,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Elia
相关产品推荐
相关产品推荐

