Discord.py获取用户头像报错:NoneType无url属性的解决求助
Discord.py 命令头像处理错误修复方案
问题描述
执行embed.set_thumbnail(url=interaction.user.avatar.url)时,无自定义头像的用户触发以下错误:
discord.app_commands.errors.CommandInvokeError: Command 'balance' raised an exception: AttributeError: 'NoneType' object has no attribute 'url'
之前尝试的两段代码均无效:
- 第一段代码逻辑错误,无论用户是否有头像都显示默认头像
- 第二段代码仍会触发原错误,因为未先判断
avatar是否为None就直接访问url
尝试代码1:
if interaction.user.avatar.url == True: embed.set_thumbnail(url=interaction.user.avatar.url) else: embed.set_thumbnail(url="https://ubg100.net/images/discord.jpg") await interaction.response.send_message(embed=embed)
尝试代码2:
if interaction.user.avatar.url == "NoneType": embed.set_thumbnail(url=interaction.user.avatar.url) else: embed.set_thumbnail(url="https://ubg100.net/images/discord.jpg") await interaction.response.send_message(embed=embed)
正确解决方法
核心逻辑是先判断avatar是否为None,再决定使用自定义头像还是默认头像:
# 判断用户是否拥有自定义头像 if interaction.user.avatar: embed.set_thumbnail(url=interaction.user.avatar.url) else: # 使用Discord官方默认头像,无需自定义外部链接 embed.set_thumbnail(url=interaction.user.default_avatar.url) await interaction.response.send_message(embed=embed)
错误原因分析
- 两段尝试代码均直接访问
interaction.user.avatar.url,当用户无自定义头像时avatar为None,访问url会直接触发AttributeError - 第一段代码中
interaction.user.avatar.url == True的逻辑完全错误,字符串永远不会等于布尔值True - 第二段代码判断
interaction.user.avatar.url == "NoneType"无意义,NoneType是类型名称,不是avatar的取值
内容的提问来源于stack exchange,提问作者obesttellez
相关产品推荐
相关产品推荐

