Статическая типизация Python: как сообщить средству проверки статического типа, что моя функция проверила тип?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Статическая типизация Python: как сообщить средству проверки статического типа, что моя функция проверила тип?

Сообщение Anonymous »

У меня есть следующий код:

Код: Выделить всё

ExprType: TypeAlias = int | str | datetime

def check_type(value: ExprType, expected_type: type[ExprType]):
if not isinstance(value, expected_type):
raise TypeError(f"Expected {expected_type}, but got {type(result)}.")

value: ExprType = 0

# ... more processing ...

if m := re.match("(\d+)", text_var):
check_type(value, int)
value += int(m.group(1))
Теперь в последней строке я абсолютно уверен, что старое значение value является целым числом, поскольку оно было проверено функцией check_type. Однако VSCode (Pylance) не так уверен в этом и предупреждает меня, что:

Код: Выделить всё

Operator + is not supported for types ExprType and int.
Чтобы провести аналогию:

Код: Выделить всё

my_var: int | None = 5       # type(my_var) = int | None

if my_var:                   # type(my_var) = int | None
print("I'm not None")    # type(my_var) = int
else:
print("I'm None")        # type(my_var) = NoneType
В этом случае Pylance понимает, что тип my_var — int | Нет в строке if, но он меняет свой тип внутри команды if. Я хочу сообщить Pylance, что моя функция check_type также работает как проверка типов.

Подробнее здесь: https://stackoverflow.com/questions/772 ... tion-has-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»