Python AttributeError:';str';对象没有属性';追加';(具体)
当前我的Twitch聊天机器人有问题,当机器人接收JTV发送标志给频道中的某人(给予他们mod权限)时,会发生此错误 我遇到的问题是,这个错误有时会发生,有时不会。因此,我无法在我的VPS上运行稳定的进程。有什么帮助吗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]
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
作为变量名。它是内置类型名称之一。1list
不是一个好名字,因为它屏蔽了内置函数list()
。2.在某种程度上,list
根本不是一个list
,而是一个str
。由于这来自于mods.get(channel)
,因此其结果有时是str
,可能是因为channel
在mods
中,并且mods[channel]
没有被分配一个空的列表。3.管道胶带修复方法是将append()
放入一个try?该程序从多个频道接收聊天,我想从每个频道获得一个MOD列表。除了列表(或其他内置/关键字)以外的任何内容。甚至包括列表。我相信lst是通用列表的首选名称。看起来这解决了这个错误。我不得不修改删除mods,因为它会触发与“.remove”相同的错误。