Python AttributeError:' str'对象没有属性'追加' (具体)

时间:2015-06-09 01:49:31

标签: python bots irc twitch

目前我的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

这是我删除它们的地方,不确定这是否会导致错误。但我会发布它...

# 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) 

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

首先,将list称为my_list。其次,只要channel不在modsmods[channel]就不会分配新的list。事实上,它表示它是str意味着您要在代码中的某个位置分配字符串。你可能应该研究一下。但你可以尝试通过请求宽恕而不是许可来回避所有这些:

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

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

答案 2 :(得分:0)

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

顺便说一句,不要使用list作为变量名。这很令人困惑。

例如:

import logging

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