如何修复 Python 缩进

2024-12-11 08:47:00
admin
原创
138
摘要:问题描述:我有一些 Python 代码的缩进不一致。有很多制表符和空格的混合使用使问题更加严重,甚至空格缩进也无法保留。代码按预期工作,但难以维护。如何在不破坏代码的情况下修复缩进(类似HTML Tidy ,但用于 Python)?一些针对编辑的建议:Vim 插件:+ 在 vim 中用空格替换制表符 + 仅在...

问题描述:

我有一些 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,,),但您需要弄清楚哪个包具有命令行工具,因为每个发行版在不同的包中都有该工具yumdnf

解决方案 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 indentedPython 脚本制作成某个tab indented版本,只需使用这个在线工具:

https://www.tutorialspoint.com/online_python_formatter.htm

解决方案 14:

Google 还有一个很棒的项目,叫做YAPF

它可以自动重新格式化整个项目或检查项目是否具有正确的缩进/格式。我在一个商业项目中使用了它,我推荐它。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用