почему pylint жалуется на ненужный «elif» после «return» (no-else-return)?

#pylint

#python #пилинт #pylint

Вопрос:

почему pylint жалуется на этот блок кода?

R1705: Unnecessary "elif" after "return" (no-else-return)

 def f(a):
    if a == 1:
        return 1
    elif a == 2:
        return 2
    return 3
  

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

 def f(a):
    if a == 1:
        b = 1
    elif a == 2:
        b = 2
    else:
        b = 3

    return b
  

Решение:

 def f(a):
    if a == 1:
        return 1
    if a == 2:
        return 2
    return 3
  

Ответ №1:

Цель else блока — определить код, который не будет выполняться, если условие истинно, поэтому выполнение не будет продолжаться до следующего блока.

Однако в вашем коде основной условный блок имеет оператор return , что означает, что выполнение завершит функцию, поэтому нет необходимости в блоке else: весь последующий код после возврата, по определению, не будет выполнен, если условие истинно. Это избыточно. Его можно заменить простым if .

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

1. elif это сокращение от «else if».

2. но код в полном порядке, и это имеет смысл, верно? является ли это ограничением / ошибкой pylint?

3. Код содержит избыточный оператор else, и pylint уведомляет вас об этом, что как раз и является его задачей.

4. Я понимаю. Каков рекомендуемый способ кодирования такой логики?

5. Просто замените elif на if — они семантически идентичны в этой ситуации без избыточного неявного else.