【问题标题】:autopep8 indenting inconsistentlyautopep8 缩进不一致
【发布时间】:2021-10-27 17:28:15
【问题描述】:

我正在将 autopep8 实施到现有项目中,有时会奇怪地格式化较长的行。比如有这个代码sn -p:

client_data={'id': str(self.user.client.client_id), 'type': self.user.client.client_type},

其格式如下:

self.setup_auth(UserProxy(self.user.sub, [],
                          client_data={
    'id': str(
        self.user.client.client_id),
    'type': self.user.client.client_type},
    roles=[]))

所以传递给UserProxy 的参数在第一行有两个元素,然后第三个元素在新行上正确缩进,但字典的元素只缩进一次,而不是从它来的行缩进一次关闭。

如果我尝试手动修复它,它只会恢复。

有人知道我可以如何改进这种情况下的缩进吗?

编辑: 我在 pyproject.toml 中运行 autopep8

[tool.autopep8]
max_line_length = 88
in-place = true
recursive = true
aggressive = 3

【问题讨论】:

    标签: python indentation pep8 autopep8


    【解决方案1】:

    缩进有点一致,只是不是你想要的。为了符合 PEP8,您对原始代码无能为力,因为一行中有很多事情要做。把它拆开——它会更易读,让autopep8开心。

    client_data = {
        'id': str(self.user.client.client_id),
        'type': self.user.client.client_type }
    proxy = UserProxy(self.user.sub, [], client_data=client_data, roles=[])
    self.setup_auth(proxy)
    

    【讨论】:

      【解决方案2】:

      顺便说一句,我不确定您对 autopep8 的依恋程度如何,但这是 Black 在相同代码上的样子:

      self.setup_auth(
          UserProxy(
              self.user.sub,
              [],
              client_data={
                  "id": str(self.user.client.client_id),
                  "type": self.user.client.client_type,
              },
              roles=[],
          )
      )
      

      我喜欢它的外观。

      【讨论】:

      • 黑色是另一种可能性,但我想避免它,因为它往往会添加很多不必要的线条。在一些测试代码中,autopep8 添加了 80 行新代码,而 black 添加了超过 400 行。不过,Black 肯定比 autopep8 更好地处理这种情况
      【解决方案3】:

      看起来您的选择是:

      1. 使用--SELECT = <Features> 仅选择您要修复的问题类型。
      2. 提供指定的配置文件herehere。在配置文件中,您可以选择要忽略的事物类型。

      【讨论】:

      • 谢谢。我试图让 autopep8 忽略忽略行长的 E501,但我想保留该规则,我只是希望它改变行的方式有所不同。我希望规则的应用方式可能会有更多的粒度,比如能够创建一个脚本来覆盖 E501 的工作方式,但我没有找到类似的东西。到目前为止,Woodfords 的建议似乎是目前最合适的,尽管我将其引入到一个已经存在的项目中,所以在手动修复之前,有些代码会被忽略
      • 我不得不承认@Woodford 的回答非常好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2014-07-10
      • 2014-08-18
      • 2021-09-13
      相关资源
      最近更新 更多