Python错误:attribute error:“int”对象没有属性“append”

2024-04-28 20:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我已经看过类似的问题,但我仍然遇到同样的问题,无法解决。对于这项编程任务,我正在为Clite词典的一小部分创建一个词汇分析的简化版本。我从输入文件中提取标记,输出分析结果。我正在为使用字典找到的标识符创建一个符号表。当我在不同的行上找到相同的标识符时,我需要将找到它的行追加到符号表中。例如,我在第2行和第7行找到标识符“number18”。所以符号表需要从{number18:2}转到{number18:2,7}

当我试图将新的行号附加到当前字典条目上时,问题就出现了。当我在题目中发帖时,我发现了错误。这是我到目前为止的代码

y = 0
s2 = ()
stable = dict()

for line in open("Sample.txt","r"):
    x1 = ''
    for char in line:
    if char.isalpha():
        x1 = x1 + char
    elif char.isdigit():
        x1 = x1 + char
    elif char == '.':
        x1 = x1 + char
    elif x1 != '':
        break

    #print (x1)    
    if (x1 == "for" or x1 == "bool" or x1 == "char" or x1 == "else" or x1 == "false" or x1 == "float" or x1 == "if" or x1 == "int" or x1 == "main" or x1 == "true" or x1 == "while"):
        s2=(y,"Keyword",x1)
    elif x1.isidentifier():
        s2=(y,"Identifier",x1)
    if x1 in stable.keys():
        stable[x1].append(y)
    else:
        stable[x1]=y


    elif x1.isdigit():
        s2=(y,"Int",x1)
    else:
        s2=(y,"Float",x1)
    print (s2)
    y=y+1

print (stable)

Tags: orinforif字典标识符elsestable
2条回答
elif x1.isidentifier():
    s2=(y,"Identifier",x1)
    if x1 in stable.keys():
        stable[x1].append(y)
    else:
        stable[x1]=y

在上面的else部分中,您是第一次添加integer。因此,下次使用append时,会出现该错误。

更确切地说,当您第一次将值添加到dict时,请将整数y包装在列表[y]

    else:
        stable[x1]=[y]

好吧,您已经从@Martijn的答案中知道,在这里使用defaultdict将是更好的选择,因为这样您就不需要检查containmentkey

但是,仍然与你在dict中检查密钥的方式有关:

if x1 in stable.keys():

您不需要使用stable.keys(),只需使用stable,这将只签入keys

if x1 in stable:

首先将dict值设置为int

    stable[x1]=y

但后来你试着把它当作一个list

    stable[x1].append(y)

从包含第一个intlist开始:

    stable[x1]=[y]

.append()将起作用。

或者,可以使用^{}

stable = defaultdict(list)

然后随意附加,无需测试密钥是否已存在:

    stable[x1].append(y)  # No need to do `if x1 in stable`.

相关问题 更多 >