Checking whether type is None

Steven D'Aprano steve+comp.lang.python at pearwood.info
Tue Jul 24 19:02:11 EDT 2018


On Tue, 24 Jul 2018 12:33:27 -0700, Tobiah wrote:

[...]
> So what would I compare type(None) to?

Why would you need to? The fastest, easiest, most reliable way to check 
if something is None is:

    if something is None



> 	>>> type(None)
> 	<type 'NoneType'>
> 	>>> type(None) is NoneType
> 	Traceback (most recent call last):
> 	  File "<stdin>", line 1, in <module>
> 	NameError: name 'NoneType' is not defined


You can do:

    from types import NoneType


or if you prefer:

    NoneType = type(None)


but why bother?


> I know I ask whether:
> 
> 	>>> thing is None
> 
> but I wanted a generic test.

That *is* a generic test.


> I'm trying to get away from things like:
> 
> 	>>> type(thing) is type(None)

That is a good move.


> because of something I read somewhere preferring my original test
> method.

Oh, you read "something" "somewhere"? Then it must be good advice!

*wink*

Writing code like:

    type(something) is dict

was the standard way to do a type check back in the Python 1.5 days. 
That's about 20 years ago now. These days, that is rarely what we need 
now.

The usual way to check a type is:

    isinstance(something, dict)

but even that should be rare. If you find yourself doing lots of type 
checking, using isinstance() or type(), then you're probably writing 
slow, inconvenient Python code.


-- 
Steven D'Aprano
"Ever since I learned about confirmation bias, I've been seeing
it everywhere." -- Jon Ronson



More information about the Python-list mailing list