Discord.py(重写):功能中的错误处理“不正确令牌”

时间:2019-06-17 04:50:10

标签: python error-handling discord discord.py discord.py-rewrite

我觉得我缺少一种解决此问题的简单方法,但是我似乎找不到解决discord.errors.LoginFailure: Improper token has been passed.错误的方法。我想做的是运行一个实际上运行机器人的函数,如果遇到任何错误(出现try:except:)并且如果捕获到“不正确的令牌”错误,则该重复自身更改我的代码中的设置,然后重试。

我认为正在发生的事情是try / except不能捕获错误,并且会停止程序(在过程中打印整个错误)。我已经尝试了一些快速的解决方案,例如将函数制作为while语句,直到到达程序末尾,它将不断重复自身,但是如果没有捕获错误,我将无法继续执行任何代码。

我的代码很混乱,并且与这个大型python文件中较早定义的许多变量有关,所以我不会显示我的整个函数。

这是简化版:

def code(mainText):
    mainLines = mainText.split("\n")
    # Do some stuff editing mainText
    final = "\n".join(mainLines)
    try:
        exec(final, globals())
    except Exception as e:
        print(str(e))
        # edit 'final' a bit
        exec(final, globals())

完整的错误消息:

Task exception was never retrieved
future: <Task finished coro=<Client.start() done, defined at E:\DiscordBot\lib\site-packages\discord\client.py:526> exception=LoginFailure('Improper token has been passed.')>
Traceback (most recent call last):
  File "E:\DiscordBot\lib\site-packages\discord\http.py", line 258, in static_login
    data = await self.request(Route('GET', '/users/@me'))
  File "E:\DiscordBot\lib\site-packages\discord\http.py", line 222, in request
    raise HTTPException(r, data)
discord.errors.HTTPException: 401 UNAUTHORIZED (error code: 0): 401: Unauthorized

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "E:\DiscordBot\lib\site-packages\discord\client.py", line 542, in start
    await self.login(*args, bot=bot)
  File "E:\DiscordBot\lib\site-packages\discord\client.py", line 400, in login
    await self.http.static_login(token, bot=bot)
  File "E:\DiscordBot\lib\site-packages\discord\http.py", line 262, in static_login
    raise LoginFailure('Improper token has been passed.') from exc
discord.errors.LoginFailure: Improper token has been passed.

撰写本文时,我发现“从未检索到任务异常”是否很重要,或者是常见的“标记不当”错误?

谢谢,对于我的不良编码实践以及缺乏使用Stack Overflow的经验,表示歉意。

3 个答案:

答案 0 :(得分:0)

尝试一下。我自己还没有尝试过。这是我从您的问题和错误消息中可以理解的最佳答案:

#Put this at the bottom of your .py file
try:
    bot.run(BOT_TOKEN)
except discord.errors.LoginFailure as e:
    print("Login unsuccessful.")

答案 1 :(得分:0)

您的令牌是字符串吗? 您是从不和谐的开发人员门户网站上获得的吗?也就是说,您确定这是正确的令牌吗?

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

答案 2 :(得分:0)

看到存在HTTPException和登录失败的事实,您应该将两者都放在除外,如下所示:

NULL

这也将捕获HTTPException。就像我说的那样,如果您读到错误,则会看到HTTPException LoginFailure。如果您想捕获错误并做出自定义错误消息,则都需要捕获这两个消息。