如果没有遇到参数,则引发适当的异常

时间:2011-11-28 14:45:51

标签: python exception

当我的一个函数检测到None传递到需要参数值的位置时,引发的“正确”异常类是什么?例如:

 def MyFunction(MyArg1, MyArg2):

     if not MyArg2:
          raise ?Error?

我想我已经看到TypeError在这里使用了(而且我确实收到了NoneType,其他类型是预料到的)但这对我来说并不合适。我认为异常可能更明确的情况。

5 个答案:

答案 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)

正如其他人所说,TypeErrorValueError是自然的。如果它看起来不够具体,那么你可以将两个例外中的任何一个更好地拟合。这允许为广泛的函数类一致地处理无效参数,同时还为特定函数提供更多详细信息。

答案 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

这可以防止有人向您传递错误的类型,以及处理无问题。它会返回AssertionErroras per the docs.