autopep8 缩进不一致

Posted

技术标签:

【中文标题】autopep8 缩进不一致【英文标题】:autopep8 indenting inconsistently 【发布时间】: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

【问题讨论】:

【参考方案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】:

看起来您的选择是:

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

【讨论】:

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

以上是关于autopep8 缩进不一致的主要内容,如果未能解决你的问题,请参考以下文章

text 缩进中不一致使用制表符和空格

TabError:缩进中制表符和空格的使用不一致 - 集成 MailChimp Django

Python起步

python基础---流程控制

python中使用pycharm2018工具安装Autopep8

python基础autopep8__python代码规范