Pycharm предупреждает, что нельзя конкатенировать кортежи разных типов (Python)
Работаю в 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)
Источник: Stack Overflow на русском