什么是 SyntaxError?
SyntaxError 的中文意思是“语法错误”。

你可以把它想象成你在说中文或写英文时犯的语法错误,我饭吃”或者“I eat饭”,这种句子虽然别人能猜到大概意思,但在语言规则上是错误的,计算机无法理解。
在 Python 中,你必须严格遵守它的语法规则,只要有一点点不符合,解释器在执行代码时就会立刻“罢工”,并抛出 SyntaxError,告诉你:“喂,这句话我没法读,语法有问题!”
最常见的原因及解决方法(附实例)
以下是导致 SyntaxError 的几个“罪魁祸首”,按从易到难的顺序排列。
缺少必要的符号(冒号、括号、引号等)
这是最常见的新手错误,尤其是在定义函数、类、循环或条件语句时。

规则:
def,class,if,elif,for,while,try,with等语句的末尾必须有冒号 。- 括号 、
[]、 必须成对出现。 - 字符串必须用引号 或 包裹,且成对出现。
错误实例:
# 错误1:if 语句末尾缺少冒号
if x > 5
print("x is greater than 5")
# 错误2:括号不匹配
print("Hello, world" # 缺少右括号
# 错误3:引号不匹配
message = 'This is an unclosed string
# 错误4:定义函数忘记冒号
def my_function()
print("This is a function")
如何解决: 仔细检查报错行及其上一行,确保所有符号都已正确闭合。
- 对于
if语句,在 后按回车,很多编辑器会自动帮你缩进。 - 对于括号和引号,编辑器通常会有高亮提示,帮助你找到不匹配的另一半。
错误的缩进
Python 使用缩进来组织代码块(if 语句里的代码、函数里的代码),而不是像 C++ 或 Java 那样用大括号 ,缩进是 Python 语法的核心部分。

规则:
- 同一个代码块内的所有行必须拥有相同的缩进量。
- 通常使用 4 个空格 作为标准缩进(不要用 Tab 键,除非你明确知道它的设置)。
- 不同层级的代码块,缩进量要递增。
错误实例:
if True:
print("This line is not indented") # 错误:if 代码块内的行没有缩进
print("This line is indented correctly")
print("This line is over-indented") # 错误:缩进层级过多,与上一行不匹配
如何解决:
- 确保代码块内的每一行都相对于
if、for、def等关键字向右缩进。 - 确保整个代码块的缩进是统一的,在大多数现代编辑器(如 VS Code, PyCharm)中,选中代码后按
Shift + Tab可以减少缩进,按Tab可以增加缩进。
拼写错误或保留关键字用错
Python 的关键字(如 def, for, if, in, not, None)是具有特殊含义的,不能用作变量名或函数名,拼写错误也会导致解释器无法识别。
错误实例:
# 错误1:把 'def' 拼错成 'deff'
deff my_function(): # SyntaxError: invalid syntax
pass
# 错误2:把 'for' 拼错成 'fer'
fer i in range(10): # SyntaxError: invalid syntax
print(i)
# 错误3:使用关键字作为变量名
None = 10 # SyntaxError: cannot assign to None
如何解决:
- 仔细检查拼写,特别是那些看起来相似的单词。
- 避免使用 Python 的保留关键字作为变量名,你可以运行
help("keywords")来查看所有关键字。
字符串引号未闭合
这个错误非常普遍,尤其是在字符串中包含了单引号或双引号时。
错误实例:
# 错误1:字符串忘记闭合 my_string = "This is an unclosed string # 错误2:引号混用导致提前闭合 my_string = "This is a string with a 'single quote' inside" # 这是正确的 my_string = "This is a string with a "double quote" inside" # 错误!解释器在 "double" 处就认为字符串结束了
如何解决:
- 检查字符串的开始和结束,确保引号成对。
- 如果字符串内部需要包含与外部相同的引号,可以使用转义字符
\,或者使用不同类型的引号包裹字符串。- 正确示例:
'He said, "Python is great!"' - 正确示例:
"She's learning Python."
- 正确示例:
在无效的语法位置放置了代码
代码的顺序或位置不对,也会导致语法错误。
错误实例:
# 错误:在函数定义之前就调用函数
my_function() # NameError 也会发生,但有时会表现为 SyntaxError
def my_function():
print("Hello")
如何高效地排查和修复 SyntaxError
当遇到 SyntaxError 时,不要慌张,遵循以下步骤,通常能很快解决问题。
仔细阅读错误信息
Python 的错误信息非常友好,它会直接告诉你问题所在。
File "your_script.py", line 3
print("Hello, world"
^
SyntaxError: EOL while scanning string literal
File "your_script.py", line 3: 告诉你错误发生在哪个文件的第 3 行。print("Hello, world": 显示出错的代码行。^(向上的箭头): 这是最重要的线索! 箭头精确地指向了解释器认为问题发生的位置,在这个例子中,箭头在字符串的末尾,提示你字符串没有正确关闭。SyntaxError: EOL while scanning string literal: 错误类型和描述。EOL(End of Line) 意思是“行尾”,string literal意思是“字符串字面量”,合起来就是“扫描字符串字面量时遇到了行尾”,也就是字符串没关好。
检查箭头指向的行及其上一行
错误并不总是精确地发生在箭头所指的位置,很多时候,是上一行的某个符号(如括号、引号)没有关闭,导致下一行被错误地解析。
经典案例:
my_list = [1, 2, 3, 4 print(my_list) # 假设错误报在这一行
- 错误信息可能指向
print这一行,告诉你这里有语法错误。 - 但真正的原因是上一行的列表
[]没有闭合。 - 解决方法: 总是检查报错行和它上面一行的括号、引号等是否成对。
使用代码编辑器的语法高亮
一个好的代码编辑器(如 VS Code, PyCharm, Sublime Text)是你的好朋友,它们会:
- 用不同颜色高亮显示代码。
- 当括号、引号不匹配时,通常会有视觉提示(比如高亮显示对应的另一半)。
- 提供自动缩进功能。
利用好这些功能,可以提前发现很多语法问题。
逐行简化代码
如果错误信息看不懂,或者代码很长,可以尝试:
- 注释掉一大段代码,只保留最核心的部分。
- 逐行取消注释,观察在哪一行会再次出现错误。
- 这种方法可以帮助你快速定位到出错的“元凶”。
| 错误原因 | 核心规则 | 解决技巧 |
|---|---|---|
| 缺少符号 | if, for, def 后必有 ;括号、引号必须成对。 |
检查报错行及其上一行,补全缺失的符号。 |
| 错误的缩进 | 同一代码块内缩进必须一致,用 4 个空格是标准。 | 使用编辑器的自动缩进功能,确保对齐。 |
| 拼写错误/关键字用错 | 不能拼写错 def, if 等,也不能用它们做变量名。 |
仔细核对拼写,避免使用 help("keywords") 列出的关键字。 |
| 字符串引号未闭合 | 字符串必须用引号完整包裹。 | 检查字符串的开始和结束,或使用不同类型的引号包裹。 |
| 代码位置无效 | 代码的逻辑顺序要正确,比如不能在定义函数前调用它。 | 确保代码的执行顺序符合逻辑。 |
| 排查方法 | 读懂错误信息(尤其是箭头位置)。 2. 检查报错行和上一行。 3. 善用编辑器。 4. 简化代码定位问题。 |
遇到 SyntaxError 是学习编程的必经之路,把它看作一个帮你发现代码漏洞的好朋友,耐心地按照提示去修复,你的编程能力会进步得非常快!
