В следующем коде допустимая функция и недействительная функция делают одно и то же. Почему MyPy устраивает действительный, но выдает ошибку при неверном?
Разве TypeGuard не справится с этим?
Если я добавляю функцию только в B и C и вызываю эту функцию из блока, защищенного ifBorC, это работает нормально.
Не смотрит ли MyPy на защиту типов при работе с с полнотой типов объединения?
from typing import TypeGuard
class A:
pass
class B:
pass
class C:
pass
ABC = A | B | C
BorC = B | C
def isBorC (x: ABC) -> TypeGuard[BorC]:
return isinstance(x, B) or isinstance(x, C)
def valid (x: ABC) -> str:
if isinstance(x, A):
return 'a'
if isinstance(x, B) or isinstance(x, C):
return 'b or c'
def invalid (x: ABC) -> str:
if isinstance(x, A):
return 'a'
if isBorC(x):
return 'b or c'
# Yields error: Missing return statement [return]
Подробнее здесь: https://stackoverflow.com/questions/792 ... ype-guards
Почему типы вложенных объединений не обрабатываются должным образом средствами защиты типов? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Переменные экземпляра не обрабатываются должным образом и не изменяются в Python
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Переменные экземпляра не обрабатываются должным образом и не изменяются в Python
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-