Python AttributeError: 'str' object has no attribute 'append' (Specific)

Python AttributeError: 'str' object has no attribute 'append' (Specific)

目前我的 Twitch 聊天机器人有问题,当机器人选择 JTV 发送标志以操作频道中的某人时会发生此错误(授予他们 mod 权限)。

我遇到的问题是这个错误有时会发生,有时不会。因此,我无法在 VPS 上稳定处理此 运行。有帮助吗?

message = ' '.join(line)
x = re.findall('^:jtv MODE (.*?) \+o (.*)$', message) # Find the message
if (len(x) > 0):
    channel = x[0][0]
    if (channel not in mods): # If the channel isn't already in the list
        mods[channel] = []
    list = mods.get(channel)
    list.append(x[0][1])
    print(mods) # Print updated list with new mods

这里也是我删除它们的地方,不确定这是否会导致错误。但我还是会 post 它...

# Removing mods
y = re.findall('^:jtv MODE (.*?) \-o (.*)$', message)
if (len(y) > 0):
    channel = y[0][0]
    if (channel in mods):
        mods.get(channel).remove(y[0][1])
        print(mods) 

据我所见,'list' list.append(x[0][1]) 有时必须是字符串,而不是列表。所以也许 mods.get(channel) 有时 returns 一个字符串。一种解决方案可能是检查这次是否有字符串 type(list) == str 并且不执行追加。不幸的是,我只能告诉你这些。也许看看 mods.get() 里面,看看它为什么会那样做。

首先,将 list 命名为 my_list。其次,只要 channel 不在 mods 中,mods[channel] 就不会被分配新的 list。它说它是 str 的事实意味着您正在将一个字符串分配给代码中某处的字符串。您可能应该调查一下。但是你可以通过请求宽恕而不是允许来尝试回避所有这些:

try:
    my_list.append(x[0][1])
except AttributeError:
    pass # ideally, you shouldn't let errors pass silently

此外,您可以 if x: 而不是 if (len(x) > 0):。给 x 一个更具描述性的变量名称,例如 message 或其他名称。

您应该使用日志记录来调试您的代码。发生该问题后,您可以检查日志并找出发生了什么。

顺便说一句,不要使用 list 作为变量名。很混乱。

例如:

import logging

try:
    list.append(x[0][1])
except:
    logging.error(type(x))
    logging.error(x)