Мне нужно знать, является ли переменная в Python строкой или dict. Что-то не так со следующим кодом?
if type(x) == type(str()):
do_something_with_a_string(x)
elif type(x) == type(dict()):
do_somethting_with_a_dict(x)
else:
raise ValueError
Обновление. Я принял ответ Avisser (хотя я передумаю, если кто-то объяснит, почему isinstance
предпочтительнее type(x) is
).
Но благодаря nakedfanatic для напоминания мне, что он часто чище использовать dict (как аргумент case), чем серию if/elif/else.
Позвольте мне подробно остановиться на моем случае использования. Если переменная является строкой, мне нужно поместить ее в список. Если это dict, мне нужен список уникальных значений. Вот что я придумал:
def value_list(x):
cases = {str: lambda t: [t],
dict: lambda t: list(set(t.values()))}
try:
return cases[type(x)](x)
except KeyError:
return None
Если isinstance
является предпочтительным, как бы вы написали эту функцию value_list()
?