Python运行报TypeError:not all arguments converted during string formatting如何解决
报错原因
%符号在Python中有两种语义:
- 作用于数字时为取余运算符,符合你当前的代码逻辑预期
- 作用于字符串时为格式化运算符,会尝试将右侧参数填充到左侧字符串的
%占位符位置
你遇到的报错是因为传入函数的列表中存在字符串类型的元素,执行num%100操作时Python将该逻辑识别为字符串格式化,但字符串中没有对应占位符,因此抛出该类型错误。你单独测试时传入的是纯整数列表所以运行正常,但实际业务调用时传入的counts变量包含字符串格式的数值。
解决方法
方案1(无异常场景直接修复)
直接在取余操作前将元素强制转换为整数,修改第28行的列表推导式即可:
_list = [int(num) % 100 for num in _list]
方案2(兼容异常元素场景)
如果列表中可能存在无法转换为整数的无效值,可以增加异常捕获逻辑,避免程序直接崩溃:
def ones_and_tens_digit_histogram(_list): processed_list = [] for num in _list: try: # 先转整数再取余 processed_num = int(num) % 100 processed_list.append(processed_num) except (ValueError, TypeError): # 可根据业务需要选择跳过无效值、打印日志或抛出明确提示 continue _list = processed_list # 后续原有逻辑保持不变 _hist = [] for i in range(10): sum = 0 for num in _list: if( int(num/10) == i): sum +=1 if(num%10 == i): sum +=1 _hist.append(sum/(len(_list)*2)) return(_hist)
你也可以在调用函数前执行print([type(item) for item in counts]),确认传入的列表元素类型是否符合预期。
内容的提问来源于stack exchange,提问作者Mingfei Peng
相关产品推荐
相关产品推荐

