遇到None作为参数时应抛出什么异常

61 投票
5 回答
96156 浏览
提问于 2025-04-17 07:14

当我的某个函数发现传入了一个None(也就是什么都没有)而需要一个参数值时,应该抛出哪个“合适”的异常类呢?比如:

 def MyFunction(MyArg1, MyArg2):

     if not MyArg2:
          raise ?Error?

我觉得我见过用TypeError来处理这种情况(确实,我收到了一个NoneType,而我本来期待的是其他类型),但我觉得这在这种情况下不太合适,因为我认为可以用更明确的异常来表示这个问题。

5 个回答

3

正如其他人提到的,TypeErrorValueError 是很常见的错误类型。如果你觉得这两个错误不够具体,你可以从这两个错误中选择一个更合适的来创建一个新的错误类型。这样做可以让你在处理很多函数中无效参数时保持一致,同时也能给你提供更详细的信息,帮助你理解具体的函数问题。

4

关于创建和使用一个简单的自定义异常NoneException,你觉得怎么样呢?(也许这两行代码是值得的)

class NoneError(Exception):
    pass

raise NoneError("Object not constructed. Cannot access a 'None' object.")

可以参考Python的文档: https://pythonbasics.org/try-except/#User-defined-Exceptions

95

在Python中没有“无效参数”或“空指针”这样的内置异常。大多数情况下,函数会抛出TypeError(表示类型不对,比如NoneType)或者ValueError(表示类型对了,但值不在允许的范围内)。

如果你的函数需要一个特定类的对象,但却得到了None,那么它应该抛出TypeError,就像你提到的那样。不过,在这种情况下,你应该明确检查一下是否是None,因为如果一个对象的类型是正确的,但它实现了__nonzero____bool__,那么它可能会被判断为布尔值False

if MyArg2 is None:
    raise TypeError

Python文档

撰写回答