Python-';str';对象没有属性';追加';
我在这里搜索了这个错误,但还没有看到任何与我的情况相匹配的东西(免责声明,我仍然习惯于Python-';str';对象没有属性';追加';,python,string,list,Python,String,List,我在这里搜索了这个错误,但还没有看到任何与我的情况相匹配的东西(免责声明,我仍然习惯于Python) 当我给它一个print命令来测试lineItemMem实际上是一个列表而不是字符串时,它会为我打印一个列表。如果我输入代码 lineItemMem.split(“,”)若要断开字符串,我会收到一个错误,指出list对象没有属性split。因此,基本上,当我尝试执行列表操作时,错误表示它是一个字符串,当我尝试执行字符串操作时,错误表示它是一个列表。我已经尝试过一点胡闹,但坦率地说,我不知道这里有什
Python
)
当我给它一个print命令来测试lineItemMem
实际上是一个列表而不是字符串时,它会为我打印一个列表。如果我输入代码
lineItemMem.split(“,”)
若要断开字符串,我会收到一个错误,指出list
对象没有属性split
。因此,基本上,当我尝试执行列表操作时,错误表示它是一个字符串,当我尝试执行字符串操作时,错误表示它是一个列表。我已经尝试过一点胡闹,但坦率地说,我不知道这里有什么问题。感谢您提供的任何见解。我认为问题与以下几行有关:
lineItemMem.append(gainLoss)
lineItemMem = ','.join(lineItemMem)
最初,lineItemMem
是一个列表,您可以在其末尾附加一个项目。但是,您正在执行的join
调用会将列表变成字符串。这意味着下次运行这部分代码时,append
调用将失败
我不确定最好的解决方案到底是什么。也许您应该为字符串版本使用不同的变量?或者,在将列表项合并为一个字符串并写出结果后,您应该将lineItemMem
变量重新初始化为一个新的空列表?你必须决定什么最适合你的实际目标。有两个地方设置了lineItemMem
。第一个是:
lineItem = lineItem.split()
# ...
lineItemMem = lineItem
其中设置为拆分操作的结果,即列表
第二位是:
lineItemMem = ','.join(lineItemMem)
这里,它被设置为连接操作的结果,即字符串
因此,错误有时表示它是一个字符串,有时表示它是一个列表的原因是,这实际上取决于if语句中的条件
正如所展示的,代码几乎是不可调试的。与其修修补补,不如考虑应该实现的不同目标(读取文件、解析内容、格式化数据、将其写入另一个文件)并分别处理 字符串是不可变的。什么是类型(lineItemMem)
?
lineItem = lineItem.split()
# ...
lineItemMem = lineItem
lineItemMem = ','.join(lineItemMem)