你是否在处理 Python 脚本中的语法错误?现在就来了解关于语法错误的所有信息,包括如何在 Python 编程中轻松识别和修复这些错误。
在 Python 编程中,我们通过编写使用 Python 语法的语句,向计算机提供明确且具体的指令。这些语法是一套管理 Python 语言的规则。
与口语语言不同,这些规则不能被打破或改变。如果你在 Python 中这样做,就会抛出语法错误,因为该语言不支持规则的破坏或改变。当出现此错误时,脚本会停止执行,并在读取时提供追溯,描述错误发生的文件和行。
通常,语法错误很容易检测和修复。除了这种类型的错误,还有其他形式的错误,包括运行时错误和逻辑错误。理解每种错误有助于你更好地调试代码,并找到代码中错误和漏洞的解决方案。在本文中,我们将重点讨论语法错误,并详细介绍。
什么是 Python 中的语法错误?
在 Python 编程中,语法错误是指 Python 语句构造中的错误。编写的语句会被语言翻译成 Python 字节并逐行执行。
如果语句中出现错误,则继续执行直到错误被修复将自动成为致命错误。你可以将它们视为编写 Python 代码时犯的输入错误。它们是在解析过程中发现的,因此称为解析错误。
与需要运行代码才能检测且在某些情况下难以发现的运行时错误和逻辑错误不同,语法错误很容易被发现。事实上,如果你使用 IDE,例如 Pycharm(我使用的),许多语法错误都会在你编写代码时被指出。
为了不使问题复杂化,只需知道不正确使用标点符号、错误拼写或错误使用 Python 关键字以及错误的缩进等都会导致 Python 语法错误。
语法错误的类型和原因
尽管 Python 语言很简单,但语法错误却是 Python 中最常见的错误类型。让我们来看看在 Python 中可能导致语法错误的一些错误。
缩进错误
缩进是指行首的空格/制表符。4 个空格最适合用来定义代码块。也可以使用制表符,但不建议这样做,因为在编辑器之间移动代码可能会引起一些不一致。
除了空格数之外,其他缩进规则还包括使用一致的缩进、定义代码块时应使用缩进、缩进的行前通常使用冒号。如果你违反任何这些规则,则由于缩进不正确而导致缩进错误。让我们在实践中看看这一点。
- 缺少缩进
不缩进应该缩进的代码块将导致缩进错误。下面是 for 循环声明后没有缩进代码行的示例。
def missingindentationfunction(): for i in range(10): print(i) missingindentationfunction()
如果你运行上面的代码,你将得到下面的 IndentationError,解释代码语法中的错误。

正如你在上面看到的,提供了文件名、导致错误的代码行以及如何修复此错误。
- 缩进不一致
还记得我提到过缩进是 4 个空格的倍数吗?也可以通过点击 Tab 键来实现。Tab 键的行为方式不一致,因为一个编辑器或设备上的 Tab 键将提供 4 个空格,而在其他编辑器或设备上,它将提供 2 个空格。如果你在编辑器之间移动脚本并混合使用空格和制表符,则可能会引入不一致的缩进错误,从而导致语法错误。
括号不正确或缺失
除了使用括号定义元组数据结构外,Python 还使用括号定义函数和表达式。如果你错误地使用括号,或者在需要时没有使用括号,则会出现 SyntaxError。这可能很简单,比如在定义函数时忘记使用括号的结束对,如下所示。
def parenthesisfunction(: for i in range(10): print(i)
如果你一开始就没有括号,会发生什么情况呢?
def parenthesisfunction: for i in range(10): print(i)
如果你尝试运行上述代码,你将看到下面的回溯显示并且代码执行终止。
如你所见,它需要有一个左括号,后面是可选的参数定义,然后是右括号,后面是冒号 (:),定义后的函数代码缩进。在上述任何一种代码中,下面的代码都可以成功运行代码。
def parenthesisfunction(): for i in range(10): print(i) parenthesisfunction()
引文缺失或不正确
引号用于定义字符串,如果使用不当或根本不使用,就会引发语法错误。处理字符串时遇到的引号错误需要了解的一件事是,你可以按照你认为代码正确的方式使用字符串,但它仍然会引发错误。
重要的是,你知道可以用两种方式定义字符串——单引号和双引号。单引号代码为 ‘Python',而双引号代码为“Python”。你会喜欢这一点的一点是,这两种方式可以帮助你避免潜在的语法错误。
举例来说,看看下面的内容并告诉我它是否会运行。
her_statement = "Do you think I love you? but "how" "
在我的 IDE(Pycharm)中,你已经可以看到有些错误。如果你运行代码,你将得到以下响应。

如何解决此类问题?有两种方法可以解决此问题。首先,如果你知道字符串本身将使用双引号,则可以使用单引号。
her_statement = 'Do you think I love you? but "how" ' print(her_statement)
上述代码将成功运行。其次,你可以使用转义序列方法,即在每个“”前使用反斜杠字符,如下所示。
her_statement = "Do you think I love you? but \"how\" " print(her_statement)
关键字使用不正确
Python 有 35 个保留关键字不能用作标识符。我指的是 def、if、range、class、break True、False 等。如果你使用这些词中的任何一个作为变量的名称,则会引发 SyntaxError。在某些 IDE 中,你甚至不会被告知这是一个标识符问题,因为使用其中一些词会使它们以某种方式运行。让我们看一个例子,看看错误使用保留关键字会引发 SyntaxError。
continue = True print(continue)
如上所示,变量名为 Continue,并指定 True 作为变量。但是,continue 是该语言的保留关键字。如果运行代码,它会抛出语法错误。如果需要使用保留关键字,建议不要使用,即使你有必要,因为代码不会执行。相反,你可以稍微调整一下。例如 =,在上面的例子中,我可以做类似下面的事情。
continue_choice = True print(continue_choice)
使用保留关键字并不是唯一可能导致错误的关键字相关问题。关键字使用不当也会导致 SyntaxError。下面是一个说明这一点的示例。
def incorrect_keyword_usage(): niches = ['proxies', 'scraping', 'social media automation'] del i in niches: print(i) incorrect_keyword_usage()
上面的代码会抛出错误。我没有使用 for 关键字循环,而是使用了 del 关键字。del 关键字用于删除,而不是循环,因此会抛出错误。
未关闭的评论
单行注释简单直接。你只需在行首添加井号 (#)。你可以对任意多行执行此操作。但如果你需要编写跨多行的注释,则在每行开头使用 # 并不是 Python 式的做法。相反,你可以将注释放在“””跨多行注释”””之间。
语法错误的原因之一是你忘记关闭行。如果注释未关闭,则其后的所有代码都将被视为注释的一部分。不仅如此,解析将终止,告诉你注释字符串文字未终止。下面是这种情况的说明。
"""
this is a multi-line comment illustrating a potential error
print("this is an actual line of code not comment"
查看代码,打印语句将被视为注释的一部分。
不匹配的右花括号
在 Python 中,用于定义代码行的括号是可选的,仅用于清晰起见。如果你打算使用它,请确保关闭所有花括号。如果不这样做,你将会抛出一个错误,因为 Python 要求你关闭它。所有需要它的语句也需要关闭括号。例如,f 字符串允许你使用花括号来定义表达式和变量。
但是,你需要关闭括号。如果不这样做,将引发 SyntaxError 异常。例如,下面的示例将引发异常。你所要做的就是关闭括号,代码将正确执行。
name = "Alice"
# Invalid f-string syntax (unclosed curly brace)
greeting = f"Hello, {name!"
未定义变量
要使用任何变量名,你需要定义该变量名。如果你没有定义这样的变量名,则会引发异常。这种类型的错误被称为 NameError,因为你引用的名称不存在。
在一些文章中,这甚至被认为是运行时错误,因为一些 NameError 异常仅在运行时发现。对于具有赋值条件的变量尤其如此。如果不满足该条件并且调用了同一个变量,你将得到 UnboundLocalError。让我们看下面的一个例子。
def namerrorfunction(name):
if name == 'python':
greeting = f'I greet you {name}'
print(greeting)
namerrorfunction('pythonc')
缺少或不正确的运算符
算术、比较和逻辑运算符都有其正确的使用方法。如果你错误地使用了运算符或忽略了它,那么你应该准备好处理错误。
一个简单的例子是,当你有 print(ab) 时,其中 a 是 5,b 是 2。此处的预期行为是你想要将 5 和 2 相加。但在这里,我忘记添加加号 (+),因此引发了错误。下面是一个很好的例子,说明你可能会忘记使用运算符以及这会导致什么结果。
x = 5 y = 3 result = x + * 2 # Missing operand after the plus sign print(result)
如上所示,+ 运算符后应有一个数字。但是,在上面的代码中,下一个字符是多号 (*)。如果运行上面的代码,它将返回一个错误,提示你语法无效。了解如何使用每个运算符以及何时使用它们很重要。
如何修复和预防 Python 脚本中的语法错误
SyntaxError 异常是你将遇到的最常见的错误类型。如果你是该语言的新手,你会更多地遇到它。有趣的是,它是最容易修复的。以下是一些可以帮助你减少语法错误发生的提示。
使用特定于 Python 的 IDE
使用记事本或 Python 自带的标准编辑器进行编码是可行的,但这并不是一种高效的编码方式,因为你必须自己完成所有工作。使用集成开发环境 (IDE),你可以获得类、方法和变量名称的建议,以加快编码速度。它还有助于识别潜在的语法错误。
专为 Python 构建的集成开发环境 (IDE) 可以帮助你解决 90% 的语法错误。我使用 Pycharm 社区版,它帮助我在运行脚本之前就识别出潜在的错误。
它使用高亮显示和颜色来实时指定代码中可能存在语法错误的区域,以便你轻松修复这些错误。如果你使用保留关键字、忘记关闭注释或字符串文字,甚至拼错了变量,它都会向你显示。
我使用的 Pycharm 社区版是免费的,你可以从他们的官方网站下载。Visual Studio Code 是另一个免费的 IDE,可用于 Python 开发以减少语法错误,特别是如果你下载了 Python 插件。
关注引用和插入符号以识别错误来源
当出现语法错误时,Python 解释器会使用引用和插入符号向你显示导致错误的位置和原因,然后终止脚本的解析和执行。使用这种方法,你应该能够识别导致错误发生的类、函数、行和特定部分。例如,以下代码。
x = 5 y = 3 result = x + * 2 # Missing operand after the plus sign print(result)
错误在哪里?你找到了吗?在加号 (+) 之后,它期望得到一个数值,但却得到了乘号。现在,下面是回溯的图像。

如上所示,指定了文件路径和行号。在下一行中,你会看到导致错误的代码行,下面有一个插入符号,指向导致错误的行部分。
正确使用保留关键字
35 个保留关键字的保留是有原因的,并且在语言中占有一席之地。无论如何都不要尝试用任何单词来命名变量。你应该记住这些关键字,并确保只在需要时使用它们。如果你要使用保留关键字命名,则应在其后附加另一个单词或字母,这样它就不是完全相同的单词,因为使用完全相同的单词会引发错误。
右括号、中括号和引号
从上文中可以看出,语法错误的常见原因之一是未关闭注释、字符串文字和其他具有开始/结束标记的语句。如果你使用双引号定义字符串,则应使用双引号将其关闭 — 单引号也是如此。
按照惯例,Python 中不使用括号来定义代码块。但是,这是允许的。如果你使用括号来定义代码行,请确保在代码块末尾将其关闭。
确保间距和缩进的一致性
缩进通常由 4 个空格定义,尽管 2 个空格也是可以接受的。你可以使用 4 个或 2 个空格,并且不会引发错误。问题在于当你在同一个脚本中混合使用 2 个和 4 个空格时。这可能会在某些 IDE 和解释器中引发错误。
缩进错误的另一个主要原因是混合使用制表符和空格。通常,大多数 IDE 会按 Tab 键产生 4 个空格。
但是,有些人将其设置为 4。如果你在 IDE 之间移动代码,你会注意到间距可以是 2,而按 IDE 中的 Tab 键将产生 4 个空格,这将导致语法错误。你应该确保一致性,以便 Tab 只产生 4 个空格,并避免使用空格键进行缩进,因为引入更多空格或减少空格的可能性很高。
使用冒号定义代码块
对于函数、类定义、条件语句和循环等代码块,应该利用第一行末尾的冒号 (:) 来告诉解释器下一行将是一个代码块。
IDE 会自动缩进下一行。如果你忘记添加冒号,就会出现语法错误。如果你使用好的 IDE,它会在编写代码时向你指出这一点。
结 论
作为本文的总结,重要的是你要知道,大多数语法错误要么是由于不了解语言的语法(比如语言新手),要么是由于拼写错误或在需要时忘记添加字符造成的。
通过注意细节,使用如 Pycharm 这样的集成开发环境(IDE),并理解 Python 编程语言的语法,你应该能够将语法错误降到最低。

