任何人都可以帮我这个代码吗?
Jobs = ()
openFile = open('Jobs.txt')
x = 1
while x != 0:
Stuff = openFile.readline(x)
if Stuff != '':
Jobs.append(Stuff)
else:
x = 0
此代码抛出:
AttributeError: 'tuple' object has no attribute 'append'
我正在使用Python 3.6。
答案 0 :(得分:2)
在行中:
Jobs = ()
您创建了tuple
。 tuple
是不可变的,没有添加,删除或更改元素的方法。您可能想要创建list
(列表有.append
-method)。要创建列表,请使用方括号而不是圆括号:
Jobs = []
或使用list
- “构造函数”:
Jobs = list()
但是您的代码有一些建议:
open
文件要求您再次close
。否则,Python将保持文件句柄,只要它正在运行。为了方便起见,有一个上下文管理器:
with open('Jobs.txt') as openFile:
x = 1
while x != 0:
Stuff = openFile.readline(x)
if Stuff != '':
Jobs.append(Stuff)
else:
x = 0
一旦上下文管理器完成,即使发生异常,文件也会自动关闭。
很少使用它,但iter
接受两个参数。如果给它两个参数,那么它将调用每次迭代的第一个并在遇到第二个参数时立即停止。这似乎是一个完美的契合:
with open('Jobs.txt') as openFile:
for Stuff in iter(openFile.readline, ''):
Jobs.append(Stuff)
我不确定这是否真的像预期的那样工作,因为openFile.readline
会跟踪换行符(\n
),所以如果你想停在第一个空行,你需要for Stuff in iter(openFile.readline, '\n')
。 (也可能是我的计算机上的一个窗口,如果你没有问题,请忽略它!)
这也可以在两行中完成,而不是在开始循环之前创建Jobs
:
with open('Jobs.txt') as openFile:
# you could also use "tuple" instead of "list" here.
Jobs = list(iter(openFile.readline, ''))
除了带有两个参数的iter
之外,您还可以使用itertools.takewhile
:
import itertools
with open('Jobs.txt') as openFile:
Jobs = list(itertools.takewhile(lambda x: x != '', openFile))
lambda
有点慢,如果你需要它更快,你也可以使用''.__ne__
或bool
(后者可以使用,因为空字符串被认为是False
):
import itertools
with open('Jobs.txt') as openFile:
Jobs = list(itertools.takewhile(''.__ne__, openFile))
答案 1 :(得分:0)
您创建的Jobs对象是一个元组,它是不可变的。因此,你不能追加"什么都可以。
尝试
Jobs = []
相反,您可以在其中创建列表对象。
答案 2 :(得分:0)
我也遇到了同样的问题。但是我找到了解决方案。对我来说,这很有效。 问题:
w=[]
x=[],
y=[],
z=[]
for i in range(4):
w.append(i) # doesn't throw error
print(w)
这不会给w
带来错误,因为我已经将w
初始化为w = []
而没有逗号(,),并且将其视为列表,但是当我将其应用于{{1} }它给出了错误,因为我在这里用逗号将其初始化为x
并将其视为元组。
x = [],
这为我解决了,我已经在pycharm的python3中试过了。