Как проверить, подходят ли переменные пользовательскому типу

У меня есть такой код:

      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 ответ

Решение

Пример:

код:

      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
Другие вопросы по тегам