python中缺少值的标准例外是什么?

时间:2019-12-16 01:21:47

标签: python exception

在缺少正确执行函数值的情况下,应使用哪个标准python异常(如有)? TypeErrorValueError在我看来是不错的候选者,但是根据文档(我的斜体):

  

传递错误类型的参数(例如,当期望list时传递int)应导致TypeError,但传递参数值错误(例如,外部数字)预期边界)应导致ValueError

     

ValueError :当操作或函数接收到类型正确但值不正确的参数,并且未通过更精确的异常描述这种情况时引发作为IndexError。

在我看来,这些描述都没有完全抓住缺少价值的想法。但是该标准中的其他例外似乎都没有。

这是一个例子。类型myclass的对象可以用两种不同的方式实例化,每种方式都需要一个特定的参数。如果两者都不提供,则初始化失败。

class myclass(object):
    def __init__(self,firstparam=None,secondparam=None):
        if firstparam:
             self.firstinit()
        elif secondparam:
             self.secondinit()
        else:
           #What to put here ?
           raise Exception("Missing value for myclass")

if __name__=="__main__":
    #oops, forgot to specify a parameter here !
    myobj=myclass()

当然,我知道在编写库时始终可以实现自己的MissingValueError异常子类。我问这个问题是为了不重复标准中可能已经存在的内容。

1 个答案:

答案 0 :(得分:2)

适当的例外是TypeError

>>> def a(b,c) : print b,c
... 
>>> a(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a() takes exactly 2 arguments (1 given)
>>> 

此外,我建议不要为必需的参数提供默认值,这样您的班级用户将清楚地知道他已经提供了一些默认值。