Александр Мюнц

День добрый, долго пытался понять, что линтеру не нравится в этой строке:

(x1, y1), (x2, y2) = pair

В итоге получилось убрать предупреждение, записав таким образом:

x1, y1 = pair[0]
x2, y2 = pair[1]

Почему линтер ругается на подобную деструктуризация кортежа в кортеже?

4 0

Aleksei Pirogov

Глубокая деструктуризация может быть сложной в отладке, если вдруг придут данные "не той" структуры. И пусть в данном случае трудно ошибиться, но в реальных проектах такое встречается, увы.

Линтер, который мы используем, довольно строг в тех случаях, когда лучше побольше написать, но поиметь меньше проблем в будущем. Вот и в данном случае он ругается заранее.

Вы можете сделать одно из двух:

  1. Вы можете заглушить ошибку в конкретном месте с помощью соответствующего комментария:

    код  # noqa: КОД_ОШИБКИ
    

    В этом конкретном случае код достаточно очевиден, так что можно пренебречь предупреждением линтера.

  2. Можете последовать совету линтера и разбить деструктуризацию на три:

    point1, point2 = pair
    x1, y1 = point1
    x2, y2 = point2
    

    (Использования индексов при работе с кортежами стоит избегать, лучше по возможности всегда стараться деструктурировать).

0

Александр Мюнц

Aleksei Pirogov, благодарю за подробный ответ, теперь понятно.

0

M P

Aleksei Pirogov, добрый день. Почему-то второй способ (три деструктуризации) не срабатывает, выдает ошибку линтера про 6 переменных... Это все жесткие настройки линтера? Единственный вариант остается - это глушить ошибки через # noqa: ?

0

Aleksei Pirogov

Линтер у нас суровый, да :) В данном конкретном случае можно и заглушить.

А вообще ограничение количества локальных переменных, это важно. Как и ограничение глубины деструктуризации. Поэтому линтер о таком предупреждает. И тут уже разработчику решать, как реагировать на предупреждение: например, заглушить конкретную ошибку в конкретном месте. Можно рядом с заглушкой написать в комментарии, почему в данном случае предупреждение стоит проигнорировать.

0

Похожие вопросы

Natasha Petrova 5 дней назад →

Здравствуйте! Испытание прошла, но линтер почему-то ругается https://ru.hexlet.io/code_reviews/268223 подск...

Kirill Lukin 21 апреля 2020 →

Добрый день! Помогите, разобраться почему мой код не проходит проверку? ссылка (https://ru.hexlet.io/code_...

Konstantin Samarin 24 января 2020 →

Здравствуйте, у меня имеются проблемы с деструктуризацией кортежа. Также хотел бы узнать будут ли работать ...

Евгений Цыганков 17 января 2020 →

Добрый день, Вопрос по решению учителя: Подскажите, пожалуйста, в чём суть использования круглых скобок, в ...

Artem 15 января 2020 →

https://ru.hexlet.io/code_reviews/195330 Всем привет! Что я делаю не так? Вроде в интерпретаторе стороннем ...

Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Javascript, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →