Python Discord.py(重写):错误处理;“不正当代币”;在功能上

Python Discord.py(重写):错误处理;“不正当代币”;在功能上,python,error-handling,discord,discord.py,discord.py-rewrite,Python,Error Handling,Discord,Discord.py,Discord.py Rewrite,我觉得我缺少一个简单的方法来解决这个问题,但是我似乎找不到一个方法来处理discord.errors.LoginFailure:传递了不正确的令牌。error。我要做的是运行一个函数,该函数基本上运行一个bot,如果遇到任何错误(使用try:和除外:),并且如果它捕获到“不正确的令牌”错误,则更改代码中的设置并重试 我认为正在发生的是try/except没有捕获错误,它停止了程序(在过程中打印整个错误)。我尝试过一些快速的解决方案,比如将函数转换成while语句,直到它到达程序的末尾,它会不断地

我觉得我缺少一个简单的方法来解决这个问题,但是我似乎找不到一个方法来处理
discord.errors.LoginFailure:传递了不正确的令牌。
error。我要做的是运行一个函数,该函数基本上运行一个bot,如果遇到任何错误(使用
try:
除外:
),并且如果它捕获到“不正确的令牌”错误,则更改代码中的设置并重试

我认为正在发生的是try/except没有捕获错误,它停止了程序(在过程中打印整个错误)。我尝试过一些快速的解决方案,比如将函数转换成while语句,直到它到达程序的末尾,它会不断地重复自己,但是如果没有捕捉到错误,我就无法继续任何代码

我的代码很混乱,并且与前面在这个大型python文件中定义的许多变量有关,因此我不会展示我的整个函数

以下是简化版本:

def代码(主文本):
mainLines=mainText.split(“\n”)
#做一些编辑主文本的工作
final=“\n”。连接(主线)
尝试:
exec(最终版本,globals())
例外情况除外,如e:
打印(str(e))
#稍微编辑一下“final”
exec(最终版本,globals())
完整错误消息:

#Put this at the bottom of your .py file
try:
    bot.run(BOT_TOKEN)
except discord.errors.LoginFailure as e:
    print("Login unsuccessful.")
从未检索到任务异常 未来: 回溯(最近一次呼叫最后一次): 文件“E:\DiscordBot\lib\site packages\discord\http.py”,第258行,静态登录 data=wait self.request(路由('GET','/users/@me')) 请求中第222行的文件“E:\DiscordBot\lib\site packages\discord\http.py” 引发HTTPException(r,数据) discord.errors.HTTPException:401未经授权(错误代码:0):401:未经授权 上述异常是以下异常的直接原因: 回溯(最近一次呼叫最后一次): 文件“E:\DiscordBot\lib\site packages\discord\client.py”,第542行,在开始处 等待self.login(*args,bot=bot) 文件“E:\DiscordBot\lib\site packages\discord\client.py”,第400行,登录 等待self.http.static\u登录(令牌,bot=bot) 文件“E:\DiscordBot\lib\site packages\discord\http.py”,第262行,静态登录 从exc引发登录失败(“已传递不正确的令牌”) discord.errors.LoginFailure:传递了不正确的令牌。 在写这篇文章时,我发现“从未检索到任务异常”这是一个重要的错误还是一个常见的“不正确的标记”错误


感谢您,对于我糟糕的编码实践和缺乏使用堆栈溢出的经验,我深表歉意。

试试这个。我自己没试过。这是我从您的问题和错误消息中所能理解的最好答案:

#Put this at the bottom of your .py file
try:
    bot.run(BOT_TOKEN)
except discord.errors.LoginFailure as e:
    print("Login unsuccessful.")
你的令牌是字符串吗? 您是从discord开发者门户网站获得的吗?i、 e你确定这是正确的代币吗


确保BOT_令牌是一个字符串,并且您的令牌有效

如果看到存在HTTPException和登录失败的事实,您应该将这两个令牌都放在后面,除非如下所示:


尝试:
bot.run(bot\u令牌)
除discord.errors.HTTPException和discord.errors.LoginFailure外,其他为e:
打印(“登录失败”)

这也将捕获HTTPException。因为就像我说的,如果你读到错误,你会看到HTTPException和LoginFailure。如果您想捕获错误并生成自定义错误消息,则需要捕获这两个错误。

为什么要使用exec?为什么不编写另一个函数并发送该函数以供运行?我必须使用exec,因为“final”是一个从多个输入源提取的字符串,我宁愿在仍然使用exec的情况下找到解决问题的方法。我想你不明白我问的问题。我要寻找的是一种捕获任何登录失败错误的方法,而不是修复它们。不起作用,错误会通过try/except,即使排除了所有异常。@Miggy这对我很有效。我还编辑了我的文章,以确保它与我刚才尝试的内容相同。您也可以使用bot.login(token,bot=True),但它必须在函数中,并且必须等待。您的错误确实提到传递的令牌不正确。只有在bot.run(令牌)或bot.login(令牌)中使用了无效令牌时才会引发。一定是有什么原因使我的结果与你的不同。我在exec()中尝试了try/但在exec()中我运行了最终脚本,错误仍然会出现。@Miggy,将整个脚本发布在记事本上,并将其上载到可访问的地方,如Google Drive或Microsoft OneDrive。我可能需要看完整的剧本。您可以删除所需的任何bot凭据。