Почему выводит ошибку если проверить наличие типа в словаре?

введите сюда описание изображения

введите сюда описание изображения

у меня в словаре находятся типы для проверки на тип присваиваемых данных элементам

почему выводит ошибку если проверить type(a)#int in dict_1['id']

введите сюда описание изображения

Например если проверить тип на наличие в списке ошибку не выводит, а в словаре выводит ошибку введите сюда описание изображения


Ответы (2 шт):

Автор решения: askh

Попробуйте просто использовать равенство: type(a) == allow['id'].

Вы пытаетесь проверить наличие type(a) не в словаре, а в отдельном значении (которое в этом словаре хранится), которое, при этом, не является итерируемым объектом (списком например).

→ Ссылка
Автор решения: Stanislav Volodarskiy
  1. Значения в словаре не списки: int не список, str не список. Другие значения - списки. Для них in сработает.

  2. Не рекомендуется проверять типы в Питоне равенством вида type(a) == str. По той же причине плохо писать type(a) in [int, float] - принадлежность списку разворачивается в последовательное сравнение типов на равенство.

  3. Рекомендуемый способ - isinstance. isinstance принимает вторым аргументов тип или кортеж типов. Вот этот код работает так как вам нужно:

@>>> allow = {'id': int, 'name': str, 'weight': (int, float), 'price': (int, float)}
@>>> a = 1
@>>> isinstance(a, allow['id'])
True
@>>> isinstance(a, allow['weight'])
True
→ Ссылка