Python批量求和df变量报numpy.float64不可迭代错误如何解决
问题说明
需要对所有按df+数字序号规则命名的浮点变量求和,结果存入total变量,示例变量如下:
df1 = 272.6692725 df2 = 224.876735 df3 = 262.70736 df4 = 329.1992858333333 df5 = 542.3639916666667
使用如下代码尝试实现时抛出TypeError: 'numpy.float64' object is not iterable错误:
for x in range(0,300): x +=1 total = sum(globals()[f"df{x}"])
错误原因
sum()的入参必须是可迭代对象(如列表、元组等),循环中每次取到的globals()[f"df{x}"]是单个浮点数,本身不可迭代,直接传入sum()会触发类型错误。- 循环中每次都对
total重新赋值,即使不报错,最终total也只会保留最后一个df变量的值,无法得到累加结果。
解决方案
方案1:修正原有动态取变量的逻辑
先初始化累加初始值为0,循环取到每个df变量的值后直接累加即可,不需要套sum(),同时增加存在性判断避免变量缺失时报错:
total = 0 # 序号从1到300直接用range(1, 301)即可,不需要在循环内手动给x加1 for x in range(1, 301): var_name = f"df{x}" if var_name in globals(): total += globals()[var_name]
方案2:推荐的规范写法
不建议在代码中大量使用globals()动态读取变量名,后续维护、调试成本极高,同类型数值从一开始就应该放在容器结构中统一管理:
# 所有同类值统一存入列表 df_values = [ 272.6692725, 224.876735, 262.70736, 329.1992858333333, 542.3639916666667, # 后续新增的同类值直接追加到列表中 ] total = sum(df_values)
内容的提问来源于stack exchange,提问作者BenjiBoy
相关产品推荐
相关产品推荐

