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
相关产品推荐
相关产品推荐

