首页 > 解决方案 > python中缺失值的标准例外是什么?

问题描述

在缺少正确执行函数的值的情况下,应该使用哪个标准 python 异常(如果有)?TypeError对我来说ValueError似乎是不错的候选人,但根据文档(我的斜体):

传递错误类型的参数(例如,在预期 alist时传递 a int)应该导致 a TypeError,但是传递具有错误值的参数(例如,超出预期边界的数字)应该导致 a 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在编写库时我总是可以实现自己的异常子类。我问这个问题是为了不重复标准中可能已经存在的东西。

标签: pythonexception

解决方案


正确的例外是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)
>>> 

作为旁注,我建议不要为所需的参数提供默认值,这样你班级的用户就会清楚地理解他必须提供一些。


推荐阅读