Python列表元素转字符串写文件触发TypeError问题求助
错误原因
- 核心报错原因:你在代码其他位置定义过名为
str的字符串变量,覆盖了Python内置的str()类型转换函数,调用str(i)时实际是尝试调用字符串对象,因此抛出TypeError: 'str' object is not callable。 - 额外的不良实践:你使用Python内置关键字
list作为循环变量名,会覆盖内置的list类型,后续需要调用list()方法时也会触发同类报错。 - 原有代码的潜在隐患:使用
list.index(i)判断位置的写法存在逻辑漏洞,若子列表内存在重复值,index()会始终返回第一个匹配项的索引,可能出现判断错误。
修复方法
第一步:修正变量命名
排查全局代码,把所有和Python内置关键字重名的变量(比如str、list)替换为其他合法名称,例如my_str、line_item,即可解决str(i)调用报错的问题。
第二步:优化代码逻辑(可选,更简洁稳定)
你不需要循环遍历子列表判断索引,直接按下标取值拼接即可,优化后可运行的代码如下:
with open('problem2.txt', 'w') as writer: # 把循环变量名从list改成line,避免覆盖内置关键字 for line in sortedLines: # 直接取第一个元素转字符串,剩余元素直接拼接 first_part = str(line[0]) rest_part = ' '.join(line[1:]) writer.write(f"{first_part}: {rest_part}\n")
运行后写入文件的每行格式和你预期完全一致,示例首行内容为30: 10 10 10。
内容的提问来源于stack exchange,提问作者Narayana Bandhi
相关产品推荐
相关产品推荐

