python - try - Proper exception to raise if None encountered as argument
user defined exception in python (3)
As others have noted,
ValueError would be natural. If it doesn't seem specific enough, you could subclass whichever of the two exceptions is a better fit. This allows consistent handling of invalid arguments for a broad class of functions while also giving you more detail for the particular function.
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.
Just use assert:
assert type(MyArg2) == int
assert type(MyArg2) != None
This will prevent someone from passing you the wrong type, as well as dealing with the None issue. It will return an
AssertionError, as per the docs.
There is no "invalid argument" or "null pointer" built-in exception in Python. Instead, most functions raise
TypeError (invalid type such as
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
if MyArg2 is None: raise TypeError