check if var is dict

A

Astan Chee

Hi,
I have a variable, I want to check if it is a dictionary or a string.
Is there any better way to do this than I've done. How I did it is by
doing a .items() and catching a AttributeError that it raises if its not
a dictionary.
How do i properly do it?
Thanks
Astan
 
L

Lawrence Oluyede

Astan Chee said:
I have a variable, I want to check if it is a dictionary or a string.
Is there any better way to do this than I've done. How I did it is by
doing a .items() and catching a AttributeError that it raises if its not
a dictionary.
How do i properly do it?

One way is:

In [6]: isinstance(d, dict)
Out[6]: True

In [7]: isinstance("ciao", basestring)
Out[7]: True

This way you won't catch custom classes implementing dict or basestring
"protocols". In order to do that you can check if it implements the
right methods or treat the object as a dict or a string. It depends on
what you're trying to achieve.
 
B

Bruno Desthuilliers

Astan Chee a écrit :
Hi,
I have a variable, I want to check if it is a dictionary or a string.
Is there any better way to do this than I've done. How I did it is by
doing a .items() and catching a AttributeError that it raises if its not
a dictionary.
How do i properly do it?

Checking the presence of one (or more) attributes of the object is so
far the best thing to do. Now wrt/ *how* to check, using hasattr() or
getattr() might be better than a try/except block:

def my_func(some_obj):
if callable(getattr(obj, 'items', None)) \
and callable(getattr(obj, 'keys', None)):
use_obj_as_a_dict(...)
else:
use_obj_as_a_string(...)

Now keep in mind that this may lead to false positives if you don't
carefully choose the attribute(s) to check the presence of...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,432
Messages
2,571,682
Members
48,796
Latest member
Greg L.

Latest Threads

Top