Как правильно настроить тип объединения в Python?

#python #mypy #python-typing

#python #mypy #python-набор текста

Вопрос:

Я написал функцию python, которая обрабатывает list of int или list of list of int, т.е. [1,2,3] или [[1,2],[3,4] следующим образом:

 from typing import Sequence, Union
IntSeq = Sequence[int]

def foo(a: Union[IntSeq, Sequence[IntSeq]]):
    if isinstance(a, Sequence) and isinstance(a[0], int):
        # here type of a equals IntSeq
        b: IntSeq = a
  

Однако mypy сообщил мне о приведенной ниже ошибке:

 $ mypy bar.py
  
 test.py:6: error: Incompatible types in assignment (expression has type "Union[Sequence[int], Sequence[Sequence[int]]]", variable has type "Sequence[int]")
  

Как устранить эту ошибку?

Комментарии:

1. Каким должен быть результат?

2. @Camile mypy не должен выводить никаких выходных данных

3. Как вы вызываете эту функцию? Приводит ли вызов этой функции к ошибке?

4. @shahkalpesh запустите mypy поверх скрипта.

5. Найдите «несовместимые типы в присваивании» на этой странице . Это объясняет обоснование. Глядя на ваш код, кажется, что вы не можете присвоить a (который является объединением двух типов) b (типа IntSeq).