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

Python AttributeError:';str';对象没有属性';追加';(具体),python,bots,irc,twitch,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]

当前我的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) 

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

首先,调用
列表
类似于
我的列表
。其次,每当
频道
不在
mods
中时,
mods[频道]
将不会被分配一个新的
列表
。事实上,它说它是一个
str
,这意味着你在代码中的某个地方分配了一个字符串。你也许应该调查一下。但你可以通过请求原谅而不是允许来回避这一切:

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

另外,如果(len(x)>0):,您可以执行
if x:
。给
x
一个更具描述性的变量名,比如
message
或其他什么。您应该使用日志来调试代码。发生该问题后,您可以检查日志并了解发生了什么

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

例如:

import logging try: list.append(x[0][1]) except: logging.error(type(x)) logging.error(x) 导入日志记录 尝试: 列表.追加(x[0][1]) 除: 记录错误(类型(x)) logging.error(x)
您不应该使用
list
作为变量名。它是内置类型名称之一。1
list
不是一个好名字,因为它屏蔽了内置函数
list()
。2.在某种程度上,
list
根本不是一个
list
,而是一个
str
。由于这来自于
mods.get(channel)
,因此其结果有时是
str
,可能是因为
channel
mods
中,并且
mods[channel]
没有被分配一个空的
列表。3.管道胶带修复方法是将
append()
放入一个
try?该程序从多个频道接收聊天,我想从每个频道获得一个MOD列表。除了
列表(或其他内置/关键字)以外的任何内容。甚至包括列表。我相信lst是通用列表的首选名称。看起来这解决了这个错误。我不得不修改删除mods,因为它会触发与“.remove”相同的错误。