Python 如何处理自定义非类型错误?
我已经在我的bot中实现了我自己的功能/检查。无论如何,控制台中没有正常的Python 如何处理自定义非类型错误?,python,discord.py,nonetype,Python,Discord.py,Nonetype,我已经在我的bot中实现了我自己的功能/检查。无论如何,控制台中没有正常的AttributeError输出,但例如:'NoneType'对象没有属性'requested_by',因此没有AttributeError,因为它是我自己的函数 是否有办法也通过bot输出此错误,并可能使用try/except语句处理它?(我确实试过了,但没有成功) 这里有一个例子: @commands.command(别名=[“断开连接”]) @commands.guild_only() @命令。检查(是音频请求者)#
AttributeError
输出,但例如:'NoneType'对象没有属性'requested_by'
,因此没有AttributeError
,因为它是我自己的函数
是否有办法也通过bot输出此错误,并可能使用try/except
语句处理它?(我确实试过了,但没有成功)
这里有一个例子:
@commands.command(别名=[“断开连接”])
@commands.guild_only()
@命令。检查(是音频请求者)#检查它是关于什么的
异步def离开(自身、ctx):
“”“如果当前在一个语音频道中,则退出该频道。”“”
client=ctx.guild.voice\u客户端
state=self.get\u state(ctx.guild)
如果客户端和client.channel:
等待客户端断开连接()
del self.states[ctx.guild.id]
其他:
raise commands.CommandError(“不在语音频道中”)
等待ctx发送(
embed=discord.embed(title=“:wave::skin-tone-3:我离开了语音频道。”,
color=self.bot.get\u embed\u color(ctx.guild)))
不管出于什么原因,部分原因我仍然得到:
“非类型”对象没有“请求者”属性
导致错误的函数:
async def是音频请求程序(ctx):
“”“检查命令发送者是否为歌曲请求者。”“”
music=ctx.bot.get\u cog(“音乐”)
州=音乐。获得州(ctx.guild)
权限=ctx.channel.permissions\u(ctx.author)
如果permissions.administrator或state.is_请求者(ctx.author):
返回真值
其他:
raise commands.CommandError(
“要做到这一点,您需要成为歌曲请求者。”)
(未打印此项的任何内容!)
我无法处理此错误,然后可能必须从通道中删除bot或重新启动它。如果我执行一个命令离开而不使用命令。检查当然有效有没有办法解决这个问题?
我已经通过leave.error
尝试了自己的自定义错误,但这似乎不起作用。正如预期的那样,即使在XXX为None时传递类似于的消息也不起作用。在这种情况下,我也不能使用Cog.Cog.command\u error
文档,至少看起来是这样的。你能发布完整的回溯吗?实际上不可能重现错误,可能添加回溯会对我们有所帮助。通常,此错误意味着某些变量具有特殊值None
,而不是预期的值;检查所有变量是否都有期望值?@ukaszKwieciński不幸的是,这是我作为输出得到的唯一结果。例如:如果我一次得到错误,第二次执行命令,我仍然在控制台中得到正常打印的错误。看起来在某个时刻,行会主席迷失了方向。我考虑过循环和保存旧状态,但我不确定。除此之外,我甚至不知道为什么会发生这种情况。@sabik我知道事实上这意味着有些东西是None
,我还检查了可能的错误源。您所说的预期的是什么意思?但是,您仍然可以添加完整的回溯吗?您在代码中的任何地方都没有真正使用
请求的方法,添加完整的回溯可能有助于我们分析问题所在。