Pycharm предупреждает, что нельзя конкатенировать кортежи разных типов (Python)

Рейтинг: 1Ответов: 1Опубликовано: 02.02.2023

Работаю в Pycharm. Пытаюсь добавить элемент в начало кортежа:

a = tuple((1, 2, 3, 4))
b = (0,) + a
print(b)

Вывод:

(0, 1, 2, 3, 4)

Никаких ошибок/предупреждений.

Теперь сделаем кортеж разнотипным:

a = tuple((1, 2, '3', 4))
b = (0,) + a
print(b)

Pycharm услужливо подсветит переменную a во второй строке и в пояснении напишет, что:

Unexpected type(s): (tuple[int, int, str, int]) 
Possible type(s): (tuple[int, ...]) (tuple[int, ...])

Код при этом работает как ожидается:

(0, 1, 2, '3', 4)

Я, добился того, что избежал предупреждения и получил, то что надо, только пришлось в изначальный кортеж добавить первый элемент-пустышку, а потом взять слайс:

a = tuple((5, 1, 2, '3', 4))
b = (0,) + a[1:5]
print(b)

Тогда предупреждений нет и код работает как ожидалось. Но это же костыль.

Пока писал вопрос, нашел еще такое решение:

a = tuple((1, 2, '3', 4))
b = (0,) + a[:]
print(b)

Так лучше, но все равно не понятно, что не нравится Pycharm. Поясните, коллеги, что с этим делать, чтобы было красиво.

Upd. Приближаемся к истине. Если тип переменной a указать явно, предупреждение пропадает.

a: tuple = tuple((1, 2, '3', 4))
b = (0,) + a
print(b)

Ответы

▲ 2
a = tuple((1, 2, '3', 4))
b = (0,) + a
print(b)

введите сюда описание изображения

from typing import Tuple, Any

a: Tuple[Any, ...] = tuple((1, 2, '3', 4))
b = (0,) + a
print(b)

введите сюда описание изображения