如何解决索引错误(以及其他一些问题)?
Posted
技术标签:
【中文标题】如何解决索引错误(以及其他一些问题)?【英文标题】:How do I solve an index error (and some other things too)? 【发布时间】:2021-12-30 16:58:34 【问题描述】:我正在使用以下链接编写一个不和谐机器人:https://www.youtube.com/watch?v=SPTfmiYiuok
这是一个机器人,旨在在被调用时提供鼓舞人心的消息,用户也可以添加和删除所述消息。 我面临的问题:
A) 每当我输入任何内容时,它都会收到“添加了新的鼓励信息”的命令,即使我没有调用该函数。
B) 代码本身给我一个错误,指出列表索引超出范围。
作为参考,这里是出现错误消息的代码块,以及我怀疑错误所在的范围。 实际的错误是朝向底部的线:
index = int(msg.split("+del",1)[1])'):
这是代码
if msg.startswith('+inspire'):
quote = get_quote()
await message.channel.send(quote)
options = starter_encouragements
if "encouragements" in db.keys():
options = options + db["encouragements"].value
if any(word in msg for word in sad_words):
await message.channel.send(random.choice(options))
if msg.startswith('+new'):
encouraging_message = msg.split("+new ",1)[1]
update_encouragements(encouraging_message)
await message.channel.send("New encouraging message added :)")
if msg.startswith("+del"):
encouragements = []
if "encouragements" in db.keys():
index = int(msg.split("+del",1)[1])
delete_encouragement(index)
encouragements = db["encouragements"]
await
message.channel.send(encouragements)
【问题讨论】:
为什么你添加了android
和ios
标签?
尝试将花括号
添加到您的 IF
语句中,我认为由于缺少空格,await message.channel.send("New encouraging message added :)")
总是会触发。
更新:我能够弄清楚实际领事中给出的错误消息,但我仍然无法弄清楚为什么每当我输入时,它都会给我收到“添加新鼓励消息”的消息'。我曾尝试按照 Luke Duncan 的建议使用花括号,但这只是给出了无效的语法建议。
@Snickzoryx 道歉,我不记得 Python 是否有卷曲,但最新的答案似乎是正确的。
【参考方案1】:
我相信您的代码中的错误与您的缩进有关。在 python 中,缩进对于确保执行什么代码以及在什么控制结构中执行非常重要。
第一个错误:发送每条消息后都发送“添加了新的鼓励消息” 由于缩进错误,每次发送消息时都会运行此代码。这可以通过改变来解决
if msg.startswith('+new'):
encouraging_message = msg.split("+new ",1)[1]
update_encouragements(encouraging_message)
await message.channel.send("New encouraging message added :)")
到
if msg.startswith('+new'):
encouraging_message = msg.split("+new ",1)[1]
update_encouragements(encouraging_message)
await message.channel.send("New encouraging message added :)")
此更改确保您只会在消息以 +new 开头时发送“添加了新的鼓励消息:)”
第二个错误:发送“列表索引超出范围”
您当前使用 split 功能,但由于缩进,无论消息是否以 +del
开头,此代码也会运行
这可以通过改变来解决
if msg.startswith("+del"):
encouragements = []
if "encouragements" in db.keys():
index = int(msg.split("+del",1)[1])
delete_encouragement(index)
encouragements = db["encouragements"]
await message.channel.send(encouragements)
到
if msg.startswith("+del"):
encouragements = []
if "encouragements" in db.keys():
index = int(msg.split("+del",1)[1])
delete_encouragement(index)
encouragements = db["encouragements"]
await message.channel.send(encouragements)
此更改确保您永远不会收到“列表索引超出范围”错误,因为msg
将包含"+del"
,导致msg.split(+del",1)
返回包含至少两个项目的列表。
【讨论】:
以上是关于如何解决索引错误(以及其他一些问题)?的主要内容,如果未能解决你的问题,请参考以下文章
es索引字段类型错误如何高效解决(如何修改es索引字段类型)
什么是错误错误:返回错误:调用区块链数据时执行恢复以及如何解决?