【问题标题】:Line is too long. Django PEP8线路太长。 Django PEP8
【发布时间】:2023-03-27 19:45:02
【问题描述】:

PEP8 信息:

models.py:10:80: E501 line too long (83 > 79 characters)

模型.py:

field = TreeForeignKey('self', null=True, blank=True, related_name='abcdefgh')

如何正确书写这一行?

【问题讨论】:

  • 我认为对于 django 项目忽略这个特定的 pep8 规则是公平的。 Django itself makes that exception.
  • 问题很好,根本没有本地化
  • 不要忘记 PEP 8 本身——“知道何时不一致——有时风格指南建议不适用。如有疑问,请使用最佳判断。查看其他示例并决定什么看起来最好”
  • 如果您使用的是 flake8,您可以通过在行尾添加注释 # noqa: E501 使 linter 忽略此错误(参见 flake8.pycqa.org/en/3.1.1/user/ignoring-errors.html)。

标签: python django pep8


【解决方案1】:

这是“正确的”,PEP8 只是标记长度超过 79 个字符的行。但如果你担心这个,你可以这样写:

field = TreeForeignKey('self',
                       null=True,
                       blank=True,
                       related_name='abcdefgh')

或者这个:

field = TreeForeignKey(
    'self',
    null=True,
    blank=True,
    related_name='abcdefgh',
)

或者,真的,任何其他可以将单行分成多行的样式。

【讨论】:

  • @D.Shawley:尾随逗号在 Python 中很好。 (我通常在使用这种编码风格时放置它们,以避免向函数传递额外参数时出现语法问题。)
  • 如果您使用关键字和/或变量列表参数,它们很好。
  • @D.Shawley:当函数也有固定的参数列表时,它们也会起作用。
  • 嗯.. 确实如此。我想我找到了我今天要学习的一件事;)
  • @D.Shawley 不要停在一个;)
【解决方案2】:

我刚刚发现了一个名为 autopep8 的简洁程序! https://github.com/hhatto/autopep8

pip install autopep8
autopep8 -i models.py

你也可以这样做(递归):

autopep8 -ri package/

Auto PEP8 仅对文件进行安全更改,仅更改布局,而不更改代码逻辑。

【讨论】:

  • 这太棒了!谢谢! :) 与 pylint 结合使用时,我几乎不会错过使用成熟的 IDE。
【解决方案3】:

如果您有一些不方便分解的可笑的长字符串(考虑诸如 Sentry DSN、MIDDLEWARE 或 INSTALLED_APPS 中的偶尔模块),您可以将 # noqa 放在行尾并且 linter 将忽略该行。谨慎使用,绝对不要用于您要求的情况。

【讨论】:

  • 我使用的是 flake8 和黑色包。 #noqa 有效。谢谢!
【解决方案4】:

这是非常主观的。如果我严格遵循 E501,我会写:

field = TreeForeignKey('self',
                       null=True,
                       blank=True,
                       related_name='abcdefgh')

我通常认为 100 太长,而不是 80。

【讨论】:

  • @hayden:这是 Python 标准库的风格指南。最好考虑不同的行长。
【解决方案5】:

我通常将其拆分以将参数排成比原始行更深一层的缩进,例如:

field = TreeForeignKey('self', null=True,
    blank=True, related_name='abcdefgh')

特别是如果TreeForeignKey 类似于TreeForeignKeyWithReferencesToSomethingElse,在这种情况下,如果您将它们全部与左括号对齐,所有参数将从窗口的最右侧开始。如果任何参数的名称很长,例如 defaultvalueforcertaincircumstances,您可能无法将整个参数放入 80 列以下:

field = TreeForeignKeyWithReferencesToSomethingElse('self',
                                                    defaultvalueforcertaincircumstances='foo')

我也更喜欢将多个函数参数放在同一行(除非它看起来不正确;我不是纯粹主义者!)这样垂直空间不会过度扩展,导致我花更多时间在我的编辑器中滚动而不是必要的。

【讨论】:

【解决方案6】:

autopep8 也可以解决文件和整个项目中的间距问题,这里是文档的链接:https://github.com/hhatto/autopep8

  1. pip install --upgrade autopep8
  2. autopep8 --in-place --aggressive --aggressive <path_with_python_filename>
    例如:autopep8 --in-place --aggressive --aggressive C://a/test.py

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 2012-04-06
    • 2011-11-02
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 2015-08-25
    相关资源
    最近更新 更多