Python 解释器在读取你的代码时,在某个位置遇到了一个它不认识的、或者不符合语法规则的符号(标记),因此无法继续执行下去。

这就像你读一句话,突然出现一个毫无关联的汉字,让你读不下去一样。
下面我将详细解释这个错误的原因、最常见的场景以及如何解决它。
核心原因:代码的“语法”写错了
Python 是一种对代码格式非常敏感的语言,它的语法规则就像一门外语的语法。unexpected token 错误就是说你违反了这些规则,让 Python “看不懂”了。
最常见的错误场景及解决方案
我会按照从高到低的频率列出导致这个错误的原因,并提供示例和修复方法。

场景 1:缺少冒号 (最常见)
在 Python 中,很多结构块的开始都需要一个冒号,if 语句、for/while 循环、def 函数定义、class 类定义等。
错误代码示例:
# 错误示例 1: if 语句
if x > 10
print("x is greater than 10")
# 错误示例 2: for 循环
for i in range(5)
print(i)
# 错误示例 3: 函数定义
def my_function()
print("Hello, World!")
报错信息:
File "<stdin>", line 2
print("x is greater than 10")
^
SyntaxError: invalid syntax # 或者直接 unexpected token
解决方案:
在相应行的末尾加上冒号 。
正确代码示例:
# 正确示例 1
if x > 10:
print("x is greater than 10")
# 正确示例 2
for i in range(5):
print(i)
# 正确示例 3
def my_function():
print("Hello, World!")
场景 2:括号、引号或方括号不匹配
代码中的 , [], , , , 等符号必须成对出现,并且要正确地嵌套。
错误代码示例:
# 错误示例 1: 引号不匹配
print("Hello, World') # 开始是双引号,结束是单引号
# 错误示例 2: 括号不匹配
my_list = [1, 2, 3, 4 # 缺少结束的 ]
# 错误示例 3: 括号数量不匹配
result = (10 + 5) * 2 # 多了一个开始括号
报错信息:
File "<stdin>", line 1
print("Hello, World')
^
SyntaxError: EOL while scanning string literal # (扫描字符串字面量时行已结束)
# 或者
File "<stdin>", line 1
my_list = [1, 2, 3, 4
^
SyntaxError: unexpected EOF while parsing # (解析时意外遇到文件结尾)
解决方案:
检查并确保所有成对符号都正确闭合。
正确代码示例:
# 正确示例 1
print("Hello, World!")
# 正确示例 2
my_list = [1, 2, 3, 4]
# 正确示例 3
result = (10 + 5) * 2
场景 3:在 Python 2 中使用了 print 作为函数
这是一个非常经典的、从 Python 2 迁移到 Python 3 时会遇到的问题,在 Python 2 中,print 是一个关键字,而不是函数,在 Python 3 中,print 是一个函数,调用时需要用括号括起来。
错误代码示例 (在 Python 3 环境中运行):
# Python 3 中的错误写法 print "Hello, Python 3!"
报错信息:
File "<stdin>", line 1
print "Hello, Python 3!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello, Python 3!")?
解决方案:
将 print 后面的内容用括号括起来。
正确代码示例 (Python 3):
print("Hello, Python 3!")
场景 4:使用了中文全角符号
这是一个非常隐蔽但也很常见的问题,尤其是在从某些文档或网页复制代码时,Python 的语法只支持英文半角符号。
错误代码示例:
# 错误示例:使用了中文的逗号和冒号
x, y = 1, 2 # 注意这里的逗号是中文的,
if x > y: # 注意这里的冒号是中文的
print("x is larger")
报错信息:
File "<stdin>", line 1
x, y = 1, 2
^
SyntaxError: invalid character
解决方案:
将所有中文全角符号替换为英文半角符号。
正确代码示例:
x, y = 1, 2
if x > y:
print("x is larger")
场景 5:非法的变量名或操作符
变量名不能以数字开头,也不能包含空格或特殊字符(除了下划线 _),某些操作符也不能组合使用。
错误代码示例:
# 错误示例 1: 变量名以数字开头 2my_variable = 10 # 错误示例 2: 变量名包含空格 my variable = "hello" # 错误示例 3: 非法操作符 c = a ++ b # ++ 不是 Python 的合法操作符
报错信息:
File "<stdin>", line 1
2my_variable = 10
^
SyntaxError: invalid syntax
解决方案:
使用合法的变量名和操作符。
正确代码示例:
# 正确示例 1 my_variable_2 = 10 # 正确示例 2 my_variable = "hello" # 正确示例 3 c = a + b # 或者 c = a + 1
如何调试这类错误?
当你遇到 SyntaxError: unexpected token 时,可以按照以下步骤快速定位问题:
- 查看错误信息的第一行:它会告诉你出错的文件名和行号,
File "my_script.py", line 5。 - 直接定位到报错的行:根据行号,找到你的代码中对应的那一行。
- 仔细检查报错行:错误信息通常会用一个
^符号精确地指出问题所在的位置。 - 应用上面的常见场景检查清单:
- 这一行是不是
if,for,def的结尾?是不是忘了加冒号? - 这一行里的括号、引号是不是都成对匹配了?
- 是不是复制粘贴时混入了中文全角符号?
- 如果是
print,是不是忘了加括号(尤其是在 Python 3 中)? - 变量名有没有写错?
- 这一行是不是
unexpected token 错误虽然听起来很吓人,但 99% 的情况都是由以上几种简单的语法疏忽引起的,只要你保持耐心,仔细对照错误信息,并牢记 Python 的基本语法规则,就一定能快速找到并修复它。
记住这个口诀:
冒号不能忘,括号要成双,引号要对上,符号要半角,变量要合法。
