Как проверить, подходят ли переменные пользовательскому типу
У меня есть такой код:
from typing import Tuple, Dict, List
CoordinatesType = List[Dict[str, Tuple[int, int]]]
coordinates: CoordinatesType = [
{"coord_one": (1, 2), "coord_two": (3, 5)},
{"coord_one": (0, 1), "coord_two": (2, 5)},
]
Я хотел бы проверить во время выполнения, подходит ли моя переменная моему определению настраиваемого типа. Я думал о чем-то вроде:
def check_type(instance, type_definition) -> bool:
return isinstance(instance, type_definition)
Но очевидно
isinstance
не работает. Мне нужно проверить это во время выполнения, как правильно это реализовать?
1 ответ
Решение
- Попробуй использовать
Typeguard
: https://typeguard.readthedocs.io/en/latest/userguide.html#using-type-checker-functions
Пример:
код:
from typeguard import check_type
from typing import Tuple, Dict, List
coordinates = [
{"coord_one": (1, 2), "coord_two": (3, 5)},
{"coord_one": (0, 1), "coord_two": (2, 5)},
]
try:
check_type('coordinates', coordinates, List[Dict[str, Tuple[int, int]]])
print("type is correct")
except TypeError as e:
print(e)
coordinates = [
{"coord_one": (1, 2), "coord_two": ("3", 5)},
{"coord_one": (0, 1), "coord_two": (2, 5)},
]
try:
check_type('coordinates', coordinates, List[Dict[str, Tuple[int, int]]])
print("type is correct")
except TypeError as e:
print(e)
результат:
type is correct
type of coordinates[0]['coord_two'][0] must be int; got str instead