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