“缩进中制表符和空格的使用不一致”在Python中意味着什么以及如何修复它
了解为什么 Python 中的缩进如此重要,以及如何修复任何错误。
缩进代码块是编程的重要组成部分;它有多种用途。首先,它提高了可读性。想象一下,从食谱中删除所有格式,只留下成分列表和说明之间的空格。这对厨师来说很难遵循。在 Python 中,缩进还控制代码的行为方式。如果更改缩进,则可以更改执行代码的哪些部分以及执行时间。
了解如何正确缩进代码非常重要。本文将解决有关缩进的特定问题,即如何处理以下 Python 错误消息:“缩进中制表符和空格的使用不一致”。
缩进 101
我们将通过一个简单的示例来说明 Python 中的缩进是如何工作的。下面的代码块有一个 for 循环,可以将一些数字打印到屏幕上。完成后,它将打印最后一行,并显示消息“done”,因为这两个语句缩进到不同的级别。。print()print()
>>> for index in range(3): ... print(index) ... print('done') |
结果如下:
0 1 2 done |
现在进行下一个测试,尝试将最后一行缩进到与该行相同的级别,然后再次运行代码块。您应该注意到消息“done”直接打印在每个索引之后,因为它现在在循环中。通过更改代码块的缩进,程序的行为已更改。print(index)for
空格是怎么回事?
大多数其他语言使用大括号 () 来告诉编译器代码块的开始和结束位置。Python 使用空格来表示代码块;从这个意义上说,它是奇怪的一个。但是,使用空格进行缩进会释放符号以用于其他目的。通过在 Python 中不使用大括号来指示缩进,此符号可用于创建字典。这是一个优势,因为键盘上的符号数量少于要使用符号的事物数量。{}
Python 不会强迫你用制表符或空格缩进。两者都会起作用;但是,您确实需要保持一致。如果在同一程序中混合使用制表符和空格,则会收到简介中提到的错误。我们将在下一节中仔细研究这一点。
制表符与空格
让我们演示一下为什么混合制表符和空格是一个坏主意。要在简介中重现错误,请打开一个基本的文本编辑器(如记事本)并编写以下内容 for 循环:
>>> for index in range(3): ... print(index) ... print('done') |
该行应用制表符缩进,然后该行应缩进等效的空格数;两条线缩进到同一级别。将文件另存为 test.py。在命令提示符下,运行:print(index)print('done')
>>> python test.py |
打印到命令提示符的输出将包括有关错误发生位置的信息以及消息:
TabError: inconsistent use of tabs and spaces in indentation |
由于制表符和空格不能很好地结合在一起,现在的问题转向哪个最适合用于缩进代码。乍一看,选项卡似乎更可取,因为它节省了一些击键。但是在不同的 IDE 和代码编辑器中,制表符的长度可能不同,通常为 4 个或 8 个空格。如果程序在不同的编辑器中开发,这可能是一个问题;在一个编辑器中使用制表符缩进后,同一制表符在其他编辑器中的长度可能不同。另一方面,空格仅占用一个字符并避免了此潜在问题。
这种对空格而不是制表符的偏好反映在 PEP 8 – PYTHON 代码样式指南中提供的建议中。整个PEP值得一读,因为尽早养成良好的风格习惯将是有益的。但是关于制表符或空格的部分明确指出:
“空格是首选的缩进方法。 选项卡应仅用于与已使用选项卡缩进的代码保持一致。 Python不允许混合使用制表符和空格进行缩进。
此外,关于缩进的部分指出,每个缩进级别应使用 4 个空格。所以,你有它。在 Python 中正确缩进代码的首选方法是每个级别使用 4 个空格。
如何调试“缩进中制表符和空格的使用不一致”
如果您在 Python 中遇到不一致的制表符和空格使用,解决方案归结为用正确数量的空格替换制表符。手动执行此操作是一个坏主意,因为它既耗时又容易出错(尤其是对于大型程序)。
Most text editors or IDEs (INTEGRATED DEVELOPMENT ENVIRONMENTS) have a ‘find and replace’ feature; in Windows, you can normally open it by pressing CTRL + f or by using the toolbar. If you hit the tab key while in the search field, you’ll just move the focus of the window, so you have to copy a tab character (either ‘’ or ‘‘) into the find field and then type 4 spaces (‘’) into the replace field. Problem solved.\t
If you find yourself working on Linux machine where you don’t have a text editor installed (e.g. if you work on a remote server) and you need to edit your program from the command line, you can try the SED command. This is a stream editor which allows you to transform text in several ways. To replace tabs with spaces, try something like this:
sed -i.bak $'s/\t/ /g' filename |
If you’re working on a Windows machine, check out SED FOR WINDOWS.
Avoid Python Indentation Problems Altogether
为了避免此问题并与 PEP 8 样式指南保持一致,最好将 IDE 配置为在按 Tab 键时始终插入 4 个空格。配置此项取决于您使用的 IDE。对于那些不熟悉哪些 IDE 可用的人,请查看我们的文章 4 个最佳 PYTHON IDE 和代码编辑器。
对于VSCode用户,如果您查看窗口的右下角,您应该会看到类似空格的内容: 4.单击此处后,您将获得自定义缩进方法的选项。如果选择的 IDE 是 PyCharm,请参阅有关制表符和缩进的文档,以获取有关配置此选项所需的所有信息。Spyder IDE用户应导航到工具-首选项-编辑器-源代码-缩进字符。如果您使用的是旧版本,则它是工具 - 首选项 - 编辑器 - 高级设置 - 缩进字符。