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

2025年3月17日 | 阅读 12 分钟

这里的“缩进”指的是在开始任何语句或代码块时使用的空格数制表符。这些空白和制表符的使用必须与特定代码块结束时保持一致,因此,它指的是特定代码块的正确缩进。

  • Python 编程语言中使用缩进,并且它起着非常重要的作用。
  • 要初始化任何代码块或开始某个代码块,缩进用于标识该代码块。
  • 在 C、C++、Java、C# 等其他编程语言中,缩进对于开始任何代码块并不重要。
  • 在这些语言中,它们使用花括号来表示代码块,而不是缩进。
  • 但在 Python 编程语言中,缩进很重要。整个代码及其运行过程仅从匹配的缩进块开始。
  • 在 Python 编程语言中,与其他编程语言(如 C、C++、C#、Java 等)相比,我们没有 main 函数的概念。
  • 初始代码块不包含任何空白字符和制表符,最终表示 main 函数;之后,根据程序员的要求。他们将使用 if-else、for 循环等,缩进会相应变化。
  • 顾名思义,缩进中空格和制表符使用不一致会产生语法错误。
  • 当我们在任何特定编程语言中编写代码时,我们需要记住相应的语法;因此,我们不会应用不必要的空白字符。
  • 如果我们不当地使用空白字符和制表符,将会产生相应的特定错误。
  • 如果我们谈论 Python 编程语言,它更关注正确的缩进和空白字符及制表符的正确使用,以便访问代码。
  • 如果我们谈论 C 编程语言,它更关注在需要开始和结束某些代码块的地方正确使用括号。
  • 但是,如果我们不当地使用 C 语言中的空白字符和制表符。在这种情况下,编译器会忽略它,因为 C 编译器的工作预设是它在执行程序时会忽略所有空白字符和注释。

Python 中的缩进如何工作?

这里的缩进一词指的是在开始任何代码块之前使用的制表符和空白字符的数量以及特定代码块的结束,因为它最终代表一个代码块。同样,通过这种方式,我们可以使用嵌套的代码块,但这些代码块的缩进是从块到块引用的。

如果我们谈论开始块,没有任何空白字符和制表符的使用,但当我们进一步移动到接下来的第二个代码块时,我们使用 2 个空白字符。在开始特定代码块时,对于其结束,我们将做同样的事情并应用 2 个空白字符,这表示该代码块的结束。

如果我们想包含更多嵌套的代码块,我们将应用比前一个代码块更多的空白字符,这表示下一个嵌套代码块的开始。我们将应用与开始该代码块相同的空白字符数量来结束它。

同样,通过这种方式,我们可以添加更多的嵌套块,每个块的开始和结束在使用的空白字符数量上有所不同,以表示特定代码块。但是,当我们使用嵌套的代码块并在嵌套内部移动时,空白字符和制表符的数量会增加。

在 Python 编程语言中,每个代码块的缩进在指示特定代码块方面起着非常重要的作用。

当我们不一致地使用空白字符和制表符时会发生什么?

当我们谈论 Python 编程语言时,当我们不一致地在不需要的地方应用空白字符数量时,最终会产生缩进错误。

当我们正确地开始代码块,但在结束时,我们使用不规则数量的空白字符和制表符来指示特定代码块时,就会发生缩进错误;因此,由于空白字符和制表符数量不匹配,会产生错误。

如果我们谈论 C 编程语言,空白字符和制表符的数量无关紧要;它不会产生任何错误,因为 C 编译器会忽略它。但是,有时在运行 'scanf' 函数并应用额外的空白字符时,可能会产生异常情况,我们将通过更详细的讨论来理解它。

如何纠正因不必要使用空白字符和制表符而导致的代码不一致?

要纠正错误,我们必须遵循以下步骤:

  1. 确定产生错误的行代码。
  2. 观察该行并找到其对应的代码块。
  3. 通过计算空白字符和制表符来匹配用于开始该代码块的空白字符数量。
  4. 计算用于结束特定代码块的空白字符数量;如果不匹配,则通过应用正确的空白字符和制表符数量进行纠正。
  5. 如果错误仍未解决,则将目标代码块的缩进与上方和下方的代码块进行匹配。为了匹配,与上面类似,检查用于开始每个代码块的空白字符数量。它必须包含 2 个空白字符的差异。如果它们是嵌套的,否则通过随机匹配空白字符数量来纠正相应的缩进错误。

制表符和空白字符使用不一致的示例

现在让我们通过示例更详细地理解它。

示例 1

上述程序的输出

上面突出显示的块会由于开始该代码块与其结束之间的空白字符和制表符数量不匹配而产生缩进错误。即使是嵌套缩进也会影响上面的代码块。

IndentationError: expected an indented block  

示例 1 的更正

上述程序的输出

上面的程序将完美运行,就像通过匹配用于表示特定代码块的空白字符和制表符数量来纠正错误一样。

Inconsistent use of tabs and spaces in indentation

示例 2

上述程序的输出

上面突出显示的块会由于开始该代码块与其结束之间的空白字符和制表符数量不匹配而产生缩进错误。即使是嵌套缩进也会影响上面的代码块。

IndentationError: expected an indented block    

示例 2 的更正

上述程序的输出

上面的程序将完美运行,就像通过匹配用于表示特定代码块的空白字符和制表符数量来纠正错误一样。

Inconsistent use of tabs and spaces in indentation

示例 3

上述程序的输出

上述程序的输出可以正确生成。虽然它不会产生任何错误,但如果我们使用不必要的空白字符,我们将无法获得所需的输出。scanf 函数中的一个额外元素将干扰上述程序的运行。因此,它被称为上述程序中制表符和空格的使用不一致。

Inconsistent use of tabs and spaces in indentation

示例 3 的更正

上述程序的输出

这里上述程序的输出是完美的,只需删除 scanf 函数中不必要的空白字符。

Inconsistent use of tabs and spaces in indentation

示例 4

上述程序的输出

由于空白字符,即使程序是正确的,也无法生成输出。

Inconsistent use of tabs and spaces in indentation

上述代码的更正如下:

示例 4 的更正

上述程序的输出

这里上述程序的输出是完美的,只需删除 scanf 函数中不必要的空白字符。

Inconsistent use of tabs and spaces in indentation