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