如何修复 Python 缩进
- 2024-12-11 08:47:00
- admin 原创
- 138
问题描述:
我有一些 Python 代码的缩进不一致。有很多制表符和空格的混合使用使问题更加严重,甚至空格缩进也无法保留。
代码按预期工作,但难以维护。
如何在不破坏代码的情况下修复缩进(类似HTML Tidy ,但用于 Python)?
一些针对编辑的建议:
Vim 插件:
+ 在 vim 中用空格替换制表符
+ 仅在 python 文件中将 vim 中的制表符扩展为空格?
+ 使用 Vim Retab 解决 TabError: 缩进中制表符和空格的使用不一致?
+ 在 Vim 中粘贴时如何保留制表符
记事本++:
+ 在 Notepad++ 中将制表符转换为空格
+ Notepad++ 中的自动缩进
+ 如何配置 Notepad++ 以使用空格而不是制表符?
Emacs:
+ emacs 中 Python 的缩进无法正常工作
+ Emacs 批量缩进 Python
蚀:
+ 在 eclipse 中缩进 python 文件(使用 pydev)
Visual Studio 代码:
+ 适用于 Python 的 Visual Studio Code 缩进
解决方案 1:
使用在Python 安装目录reindent.py
中找到的脚本:Tools/scripts/
将 Python (.py) 文件更改为使用 4 个空格缩进,不使用硬制表符。还要修剪行尾多余的空格和制表符,并删除文件末尾的空行。还要确保最后一行以换行符结尾。
查看该脚本以获取详细的使用说明。
注意:如果你的 Linux 发行版没有默认使用 Python 安装 reindent:
许多 Linux 发行版都没有reindent
默认安装python
--> 获取此软件的一个简单方法reindent
是执行pip install reindent
。
ps 的另一种方法pip
是使用您的发行版包管理器(即apt-get
,,),但您需要弄清楚哪个包具有命令行工具,因为每个发行版在不同的包中都有该工具yum
。dnf
解决方案 2:
我会使用autopep8来做到这一点:
$ # see what changes it would make
$ autopep8 path/to/file.py --select=E101,E121 --diff
$ # make these changes
$ autopep8 path/to/file.py --select=E101,E121 --in-place
注意:E101 和 E121是 pep8 缩进(我认为您可以简单地通过--select=E1
修复所有与缩进相关的问题 - 以 E1 开头的问题)。
您可以使用递归标志将其应用于整个项目:
$ autopep8 package_dir --recursive --select=E101,E121 --in-place
另请参阅将 Python 代码转换为符合 PEP8 标准的工具。
解决方案 3:
autopep8 -i script.py
您可以使用autopep8
autopep8
自动格式化 Python 代码以符合PEP 8
nullstyle
指南。它使用pep8
实用程序来确定nullcode
需要格式化的哪些部分。autopep8
能够修复nullformatting
报告的大多数问题pep8
。
pip install autopep8
autopep8 script.py # print only
autopep8 -i script.py # write file
解决方案 4:
如果您使用Vim,请参阅:h retab
。
*:ret* *:retab*
:[范围]ret[ab][!] [new_tabstop]
替换所有包含
<Tab> 使用新的空白字符串
tabstop 值。如果没有指定新的
制表位大小或为零,Vim 使用当前值
'tabstop'。
'tabstop' 的当前值始终用于
计算现有标签的宽度。
使用 !,Vim 还可以替换仅包含普通字符的字符串
在适当的位置使用制表符分隔空格。
启用“expandtab”后,Vim 会将所有标签替换为
适当数量的空格。
此命令将 'tabstop' 设置为给定的新值,
如果对整个文件执行此操作(这是默认操作),
不应发生任何明显的变化。
注意:此命令修改任何 <Tab> 字符
在 C 程序中的字符串中。使用“ ”可以避免
这个(无论如何这是一个好习惯)。
“:retab!” 也可以通过以下方式改变空格序列:
<Tab> 字符,这可能会弄乱 printf()。
{Vi 中不存在}
当 |+ex_extra| 功能被禁用时不可用
编译时间。
例如,如果你只是输入
:ret
所有标签都将扩展为空格。
你可能想要
:se et " :set expandtab 的简写
以确保任何新行都不会使用文字制表符。
如果你不使用 Vim,
perl -i.bak -pe "s/ /' 'x(8-pos()%8)/eg" 文件.py
将用空格替换制表符,假设制表符每 8 个字符停止一次,在file.py
(原始的制表符将改为file.py.bak
,以防万一)。如果您的制表符每 4 个空格停止一次,则将 8 替换为 4。
解决方案 5:
使用 Vim,它不应该比点击Esc
,然后输入更复杂......
:%s/ / /g
...在要更改的文件上。这会将所有制表符转换为四个空格。如果间距也不一致,那么这将更加困难。
解决方案 6:
还有PythonTidy(因为你说你喜欢 HTML Tidy)。
不过,它的功能远不止清理标签那么简单。如果你喜欢这类功能,那么它值得一看。
解决方案 7:
在大多数类 UNIX 系统上,您还可以运行:
expand -t4 oldfilename.py > newfilename.py
在命令行中,如果您想用 4 以外的空格数替换制表符,请更改数字。您可以轻松编写一个 shell 脚本来同时对一堆文件执行此操作,并保留原始文件名。
解决方案 8:
由于缺少某些模块,重新缩进脚本对我来说不起作用。无论如何,我发现这个sed
命令对我来说很完美:
sed -r 's/^([ ]*)([^ ])//' file.py
解决方案 9:
如果你很懒(像我一样),你也可以下载 Wingware Python IDE 的试用版,它有一个用于修复混乱缩进的工具。它工作得很好。http
://www.wingware.com/
解决方案 10:
尝试 Emacs。它对 Python 所需的缩进有很好的支持。请查看此链接http://python.about.com/b/2007/09/24/emacs-tips-for-python-programmers.htm
解决方案 11:
尝试IDLE,并使用Alt
+X
来查找缩进。
解决方案 12:
我有一个简单的解决方案。您可以先输入“:retab”,然后输入“:retab!”,然后一切就好了。
解决方案 13:
如果尝试寻找工具来将你的2-space indented
Python 脚本制作成某个tab indented
版本,只需使用这个在线工具:
https://www.tutorialspoint.com/online_python_formatter.htm
解决方案 14:
Google 还有一个很棒的项目,叫做YAPF
它可以自动重新格式化整个项目或检查项目是否具有正确的缩进/格式。我在一个商业项目中使用了它,我推荐它。