Problem: I have to check that the a returned value is a Python dictionary.
Q1. Which of these options is the proper way to do this?
type(x) == dict
type(x) == type(dict)
isinstance(d, dict)
Then there are the other variants using is
operator instead of ==
.
Q2. Many people say that checking the type of an object is generally a bad practice, but regarding to my initial problem, do I have any other choice?
Q1. Which of these options is the proper way to do this?
Don't waste time on type checking.
It's error-prone because it's based on assumptions.
Q2. ... do I have any other choice?
Yes do this.
try:
x.the_dict_operation()
except TypeError:
# x was not the expected type for the operation
raise # or whatever.
In most cases, this amounts to "do nothing".
Just write the code. If "somehow" a malicious sociopath uses the wrong type, it will just crash like it's supposed to.