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 缩进不一致的主要内容,如果未能解决你的问题,请参考以下文章
TabError:缩进中制表符和空格的使用不一致 - 集成 MailChimp Django