我现在正在创建一个包含两个列表的函数。我希望这两个列表大小相等。我试图弄清楚如果它们的大小不同,我应该抛出什么样的异常(或者如果我应该抛出异常)。我有点想说 ValueError 但这是一个实际上不属于任何单个值的检查。
为了清楚起见,这是我的函数存根。
def create_form(field_types, field_discriptions):
pass
您可以创建自己的异常子类,称为 ArraysNotEqualSizeException。可能有点矫枉过正,但它抓住了重点。
我会使用assert
并提出一个AssertionError
:
assert len(field_types) == len(field_descriptions), "Helpful message"
否则,ValueError
带消息似乎是最好的选择。
抛出异常作为函数中的第一件事。一个功能关键错误不应该做任何事情,除非它可以做它想做的事情,否则它可能会产生不良影响
这不是一个巨大的错误。你应该使用断言
考虑放置断言的地方:
检查参数类型、类或值检查数据结构不变量检查“不可能发生”的情况(列表中的重复项、相互矛盾的状态变量。)在调用函数后,确保其返回是合理的 - Python wiki
assert len(listone) == len(listtwo),
"the function cannot continue because\
the two arguments passed are of invalid length"
ValueError
如果您想使用通用异常, Blender 建议的a将是正确的类型,但是这通常是为更大的问题保留的,并且不太有用。
快速参考:
“值错误
当内置操作或函数接收到具有正确类型但值不适当的参数时引发,并且这种情况没有由更精确的异常(如 IndexError)描述。” - Python 文档