簡體   English   中英

Discord.py(重寫):在函數中處理“不正確的令牌”時出錯

[英]Discord.py (rewrite): Error Handling "Improper Token" In Function

我覺得我缺少一個簡單的方法來解決這個問題,但我似乎找不到處理discord.errors.LoginFailure: Improper token has been passed.的方法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 的經驗,提前表示歉意。

看到有一個 HTTPException 和一個登錄失敗的事實,你應該把它們都放在 except 后面,像這樣:


try:
    bot.run(BOT_TOKEN)
except discord.errors.HTTPException and discord.errors.LoginFailure as e:
    print("Login unsuccessful.")

這也將捕獲 HTTPException。 因為就像我說的,如果您閱讀錯誤,您會看到有一個 HTTPException一個 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 開發者門戶網站獲取的嗎? 即你確定這是正確的令牌嗎?

確保 BOT_TOKEN 是一個字符串並且您的令牌有效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM