AttributeError:'元组'对象没有属性'追加'

时间:2017-02-01 17:28:14

标签: python tuples

任何人都可以帮我这个代码吗?

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。

3 个答案:

答案 0 :(得分:2)

在行中:

Jobs = ()

您创建了tupletuple是不可变的,没有添加,删除或更改元素的方法。您可能想要创建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中试过了。