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

Python使用sum函数报错'int'对象不可迭代及简化求和写法咨询

问题1:两个sum值相加报错的解决方案

你当前触发TypeError: 'int' object is not iterable报错的原因是Python内置sum()函数的第一个入参要求为可迭代对象(列表、元组、生成器等),第二个可选参数是求和起始值。你传入两个整数作为参数,第一个参数sum_A是整数不满足可迭代要求,因此报错。
两种修复方式都可以得到预期的10:

  • 直接对两个整数做加法:SumA_B = sum_A + sum_B
  • 若坚持用sum()函数,可把两个整数放入列表后传入:SumA_B = sum([sum_A, sum_B])

问题2:直接调用sum(count_A)不报错的简化写法

cursor.fetchall()在单字段查询时返回的结果是[(值,), (值,)]格式的元组列表,直接求和会触发整数与元组无法相加的错误,你可以用两种更简便的方案替代遍历取row[0]的写法:

  1. SQL层直接聚合(更推荐,性能更高)
    直接在查询语句中完成求和,不需要Python侧额外处理:
# ELEMENT 1 优化写法
cursor.execute('SELECT sum(City) FROM Nation WHERE X = ?', [X])
sum_A = cursor.fetchone()[0] # 直接得到求和结果5

# ELEMENT 2 优化写法
cursor.execute('SELECT sum(City) FROM Nation WHERE Y = ?', [Y])
sum_B = cursor.fetchone()[0] # 直接得到求和结果5
  1. Python层解包转换
    如果不想修改SQL逻辑,可以通过解包操作把元组列表转为可直接求和的序列:
count_A = cursor.fetchall() # 结果仍为[(2,), (1,), (2,)]
sum_A = sum(*zip(*count_A)) # 直接得到5,不需要遍历取row[0]

原理是zip(*count_A)会把所有元组的第一个字段提取出来打包成新的元组,解包后传入sum()即可直接得到求和结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:15:03