python - python中缺失值的标准例外是什么?
问题描述
在缺少正确执行函数的值的情况下,应该使用哪个标准 python 异常(如果有)?TypeError
对我来说ValueError
似乎是不错的候选人,但根据文档(我的斜体):
传递错误类型的参数(例如,在预期 a
list
时传递 aint
)应该导致 aTypeError
,但是传递具有错误值的参数(例如,超出预期边界的数字)应该导致 aValueError
。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
在编写库时我总是可以实现自己的异常子类。我问这个问题是为了不重复标准中可能已经存在的东西。
解决方案
正确的例外是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)
>>>
作为旁注,我建议不要为所需的参数提供默认值,这样你班级的用户就会清楚地理解他必须提供一些。
推荐阅读
- wpf - 如何在选择日期时关闭 DateTimePicker,我正在使用 Mahpps.Metro?
- jquery - 当页面加载参数时启动引导模式
- java - 将变量传递给在 Selenium Java 中使用注释定义的 webelement
- javascript - 无效的数据表格式:第 1 列必须是“字符串”类型。甘特图 ASP.NET C#
- c# - 将 DataTable 中的 2 列与 List 中的 2 列进行比较,并根据特定条件构建一个新 List
- python - 为什么我不能为 Python 安装电子邮件
- python - Python:如何组合多个 if else 语句
- arrays - jq - 在 JSON 对象中查找数组的名称,然后获取数组的内容
- redirect - OAuth 重定向 URL 验证
- flutter - 在自定义创建的形状中对齐文本:颤振