Как правильно выполнить перенос строки оператора django, чтобы удовлетворить flake8?

Этот код получает E501 line too long (85 > 79 characters) от flake8:

qobjs &= Q(
    latest_visit__visitstatistics__worst_zscore__gte=worst_zscore_min_filter)

Этот код получает E251 unexpected spaces around keyword / parameter equals:

qobjs &= Q(
    latest_visit__visitstatistics__worst_zscore__gte=
    worst_zscore_min_filter)

Что нужно, чтобы удовлетворить flake8?

РЕДАКТИРОВАНИЕ: в итоге я сказал flake8 игнорировать с помощью noqa. Я думал, что это не сработает, но мне просто нужно было более внимательно читать документацию.


person dfrankow    schedule 22.04.2018    source источник


Ответы (1)


Предполагая, что вы не можете выбрать более разумные имена переменных, потому что они сгенерированы машиной, я бы не стал беспокоиться об этом и просто сказал pep8 (или pycodestyle, или что-то еще, что flake8 фактически использует для проверки соответствия PEP-8), чтобы игнорировать строку :

qobjs &= Q(...)  # noqa

(Обновление: вместо того, чтобы полностью игнорировать строку, # noqa: E501 позволит вам игнорировать длину строки, но при этом проверять наличие других проблем.)

Если вы все еще используете максимальную ширину строки по умолчанию, равную 79, рассмотрите возможность использования чего-то более длинного. PEP-8 действительно требует такой ширины только для кода в стандартной библиотеке, и в нем прямо указано, что команды могут договориться о большей ширине.


Ошибка, которую вы получаете, связана с тем, что новая строка после = считается пробелом, как если бы вы набрали Q(late...gte= worse...filter). Вы можете использовать явное продолжение строки:

qobjs &= Q(
    latest_visit__visitstatistics__worst_zscore__gte=\
    worst_zscore_min_filter)

или используйте более короткие временные имена:

x = 'latest_visit__visitstatistics__worst_zscore__gte'
y = worst_zscore_min_filter
qobjs &= Q(**{x: y})

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

person chepner    schedule 22.04.2018
comment
Что касается первого предложенного варианта, в flake8 обратная косая черта после = в этом сценарии, скорее всего, вызовет E502 the backslash is redundant between brackets, а новая строка вызовет E251 unexpected spaces around keyword / parameter equals, как вы упомянули. Таким образом, я бы выбрал вариант использования более коротких временных имен. - person KamKam; 11.12.2019