如何正确换行 django 语句以满足 flake8?

How to properly line-wrap a django statement to satisfy flake8?

此代码从 flake8 获取 E501 line too long (85 > 79 characters)

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 忽略。我以为这行不通,但我不得不read the docs更加小心。

假设您不能选择更合理的变量名称,因为这些是机器生成的,我不会担心,只需告诉 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 那些一开始就不应该是人类可读的代码。