Mypy тип сцепленных кортежей - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть функция, которая принимает определенные кортежи и конкатенации, и я пытаюсь указать тип выходных данных, но Mypy не согласен со мной.

Файл test.py:

from typing import Tuple

def test(a: Tuple[str, str], b: Tuple[int, int]) -> Tuple[str, str, int, int]:
    return a + b

работает mypy 0.641 как mypy --ignore-missing-imports test.py Я получаю:

test.py:5: error: Incompatible return value type (got "Tuple[Any, ...]", expected "Tuple[str, str, int, int]")

Что, я думаю, является верным, но более общим, учитывая, что я указываю свои входные данные.

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Объединение кортежей фиксированной длины в настоящее время не поддерживается mypy.В качестве обходного пути вы можете создать кортеж из отдельных элементов:

from typing import Tuple

def test(a: Tuple[str, str], b: Tuple[int, int]) -> Tuple[str, str, int, int]:
    return a[0], a[1], b[0], b[1]

или используя распаковку , если у вас есть Python 3.5 +:

def test(a: Tuple[str, str], b: Tuple[int, int]) -> Tuple[str, str, int, int]:
    return (*a, *b)  # the parentheses are required here
0 голосов
/ 08 февраля 2019

Вот менее подробный обходной путь (python3.5 +):

from typing import Tuple

def f(a: Tuple[str, str], b: Tuple[int, int]) -> Tuple[str, str, int, int]:
    return (*a, *b)
0 голосов
/ 08 февраля 2019

Это известная проблема , но, похоже, нет временной шкалы, позволяющей mypy сделать правильный вывод типа.

...