Larry Lustig Larry Lustig - 3 months ago 18
Python Question

Proper exception to raise if None encountered as argument

What is the "proper" exception class to raise when one of my functions detects

None
passed where an argument value is required? For instance:

def MyFunction(MyArg1, MyArg2):

if not MyArg2:
raise ?Error?


I think I've seen
TypeError
used here (and it's true that I'm receiving a
NoneType
where some other type is expected) but that doesn't strike me as quite right for this situation where I think the Exception could be more explicit.

Answer

There is no "invalid argument" or "null pointer" built-in exception in Python. Instead, most functions raise TypeError (invalid type such as NoneType) or ValueError (correct type, but the value is outside of the accepted domain).

If your function requires an object of a particular class and gets None instead, it should probably raise TypeError as you pointed out. In this case, you should check for None explicitly, though, since an object of correct type may evaluate to boolean False if it implements __nonzero__/__bool__:

if MyArg2 is None:
    raise TypeError

Python docs:

Comments