当我的一个函数检测到None
传递到需要参数值的位置时,引发的“正确”异常类是什么?例如:
def MyFunction(MyArg1, MyArg2):
if not MyArg2:
raise ?Error?
我想我已经看到TypeError
在这里使用了(而且我确实收到了NoneType
,其他类型是预料到的)但这对我来说并不合适。我认为异常可能更明确的情况。
答案 0 :(得分:38)
没有"无效的参数"或"空指针" Python中的内置异常。相反,大多数函数会引发TypeError
(无效类型,例如NoneType
)或ValueError
(正确的类型,但该值超出了接受域)。
如果你的函数需要一个特定类的对象并获得None
,那么它应该会引发TypeError
,如你所指出的那样。在这种情况下,您应该明确检查None
,因为正确类型的对象如果实现False
/ __nonzero__
,则可以评估为布尔__bool__
:
if MyArg2 is None:
raise TypeError
Python文档:
答案 1 :(得分:2)
如果将TypeError
作为参数传递,则大多数python函数都会引发None
。接受任何函数说chr(None)
并看到它引发TypeError
。
答案 2 :(得分:2)
正如其他人所说,TypeError
或ValueError
是自然的。如果它看起来不够具体,那么你可以将两个例外中的任何一个更好地拟合。这允许为广泛的函数类一致地处理无效参数,同时还为特定函数提供更多详细信息。
答案 3 :(得分:0)
创建和使用一个简单的自定义 NoneException 怎么样:(也许它的两行代码值得)
class NoneError(Exception):
pass
raise NoneError("Object not constructed. Cannot access a 'None' object.")
参见 Python 文档: This is the resulting shape
答案 4 :(得分:-3)
只需使用断言:
assert type(MyArg2) == int
或者:
assert type(MyArg2) != None
这可以防止有人向您传递错误的类型,以及处理无问题。它会返回AssertionError
,as per the docs.