I may be having a brain fart here, but I really can’t figure out what’s wrong with my code:
for key in tmpDict: print type(tmpDict[key]) time.sleep(1) if(type(tmpDict[key])==list): print 'this is never visible' break
the output is
<type 'list'> but the if statement never triggers. Can anyone spot my error here?
Your issue is that you have re-defined
list as a variable previously in your code. This means that when you do
type(tmpDict[key])==list if will return
False because they aren’t equal.
That being said, you should instead use
isinstance(tmpDict[key], list) when testing the type of something, this won’t avoid the problem of overwriting
list but is a more Pythonic way of checking the type.
You should try using
if isinstance(object, list): ## DO what you want
In your case
if isinstance(tmpDict[key], list): ## DO SOMETHING
x = [1,2,3] if type(x) == list(): print "This wont work" if type(x) == list: ## one of the way to see if it's list print "this will work" if type(x) == type(list()): print "lets see if this works" if isinstance(x, list): ## most preferred way to check if it's list print "This should work just fine"
The difference between
type() though both seems to do the same job is that
isinstance() checks for subclasses in addition, while
This seems to work for me:
>>>a = ['x', 'y', 'z'] >>>type(a) <class 'list'> >>>isinstance(a, list) True
Although not as straightforward as
isinstance(x, list) one could use as well:
this_is_a_list=[1,2,3] if type(this_is_a_list) == type(): print("This is a list!")
and I kind of like the simple cleverness of that
import typing if isinstance([1, 2, 3, 4, 5] , typing.List): print("It is a list")