You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发Discord机器人:图片不存在时控制台报错问题求助

Discord机器人处理无效图片时控制台报错的解决方案

你的问题出在这几个核心点:

  • 仅通过HTTP状态码判断请求成功,但状态码200不代表返回的是有效图片——如果返回的是错误页面或非图片数据,Image.open()会直接抛出异常,导致控制台报错。
  • 重复调用requests.get(url),既浪费网络资源,也可能出现两次请求结果不一致的情况。
  • 未处理网络请求本身可能出现的异常(比如连接超时、DNS解析失败等)。

修复后的代码如下:

import requests
import io
from PIL import Image
from discord_slash import SlashCommand, SlashContext, create_option
import discord

slash = SlashCommand(bot, sync_commands=True)
@slash.slash(
    name="vistaprevia", 
    description="Escribe él ID de la url de imgur",
    options=[
        create_option(
            name="id_imgur",
            description="Escribe él ID de la url de imgur",
            option_type=3,
            required=True
        ),
    ])
async def vistaprevia(ctx:SlashContext, id_imgur:str):
    await ctx.defer()

    url = f"https://jose89fcb.es/SkinMinecraftVistaPreviaDiscord/skin.php?skin={id_imgur}"
    
    try:
        # 仅发起一次请求,避免重复调用浪费资源
        r = requests.get(url)
        r.raise_for_status()  # 自动捕获4xx/5xx类HTTP错误
        
        # 尝试解析并处理图片
        imagen = Image.open(io.BytesIO(r.content))
        with io.BytesIO() as imagen_binary:
            imagen.save(imagen_binary, 'PNG')
            imagen_binary.seek(0)
            await ctx.send(file=discord.File(fp=imagen_binary, filename=f"{id_imgur}.png"))
    except requests.exceptions.RequestException as e:
        # 处理网络请求或HTTP状态码错误
        await ctx.send("Error de imagen!")
        print(f"网络请求错误: {str(e)}")
    except Exception as e:
        # 处理图片解析失败的其他异常(比如非图片格式数据)
        await ctx.send("Error de imagen!")
        print(f"图片解析错误: {str(e)}")

关键修复说明:

  1. 用r.raise_for_status()替代手动判断状态码,自动捕获所有HTTP错误状态。
  2. 合并requests.get调用,复用请求结果,避免重复请求的不确定性。
  3. 通过双层异常捕获覆盖所有可能的错误场景:
    • requests.exceptions.RequestException:覆盖网络连接失败、超时、HTTP错误等所有请求类问题。
    • 通用Exception:捕获图片格式无效、解析失败等异常。
  4. 异常发生时,既给Discord用户返回统一提示,也在控制台打印具体错误信息方便排查。

内容的提问来源于stack exchange,提问作者juancarlos5487

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:15:34