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

Python中函数缺少参数时如何抛出自定义异常?

解决自定义异常不触发的问题

嘿,我明白你遇到的问题了!你现在的代码之所以还是抛出默认错误,核心原因是你的函数参数定义有问题——num是必填参数,当你不传它的时候,Python在进入函数体执行你的if num == None判断之前,就已经先抛出TypeError了,说你缺少位置参数,你的自定义异常逻辑根本没机会运行。

怎么修正?

你需要把num改成可选参数,给它设置默认值None,这样当用户不传这个参数时,函数能正常进入执行你的判断逻辑。这里还有个小细节:通常插入的内容line是必填项,所以建议调整参数顺序,让line在前,这样调用起来更符合直觉。

方案1:基础版(用内置Exception抛错)

def insertNum(self, line, num=None):
    if num is None:
        # 这里可以抛自定义错误了
        raise Exception("Num not specified.")
    self.list.insert(num, line)
    return self.list

方案2:更规范的自定义异常类

如果想让错误类型更清晰(方便后续捕获特定异常),可以自己定义一个异常类:

# 先定义自定义异常
class NumNotSpecifiedError(Exception):
    """专门用于num参数未指定的异常"""
    pass

# 然后修改你的函数
def insertNum(self, line, num=None):
    if num is None:
        raise NumNotSpecifiedError("Num not specified.")
    self.list.insert(num, line)
    return self.list

为什么原来的代码不行?

再啰嗦一下关键点:Python的函数参数检查是在函数执行前做的。你原来的函数定义def insertNum(self, num, line)里,num和line都是必填的位置参数,只要调用时少传一个,Python直接就抛出TypeError,根本不会进入函数体执行你的if判断。只有给参数设置默认值,让它变成可选参数,函数才能正常接收“不传该参数”的情况,你的自定义异常逻辑才会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:15:29