一、语法类错误 SyntaxError(代码书写格式错误,运行前解析阶段直接报错)
代码不符合 Python 语法规则,解释器读不懂代码,程序完全无法启动
| 报错类型 | 触发原因 | 示例错误代码 | 报错信息 |
|---|---|---|---|
| SyntaxError | 括号/引号不匹配、少冒号、缩进混乱、关键字误用 |
if 1>0 print(1) |
SyntaxError: expected ‘:’ |
| SyntaxError | 字符串引号混用未转义 |
s = "He said "hello"" |
SyntaxError: invalid syntax |
| SyntaxError | 缩进错误混用空格Tab |
def a():
print(1)
print(2)
|
SyntaxError: unindent does not match any outer indentation level |
| SyntaxError | 非法赋值(给字面量赋值) |
100 = x |
SyntaxError: cannot assign to literal |
二、名称/变量类错误 NameError(变量、函数未定义)
代码语法没问题,但使用了不存在的标识符
| 报错类型 | 触发原因 | 示例错误代码 | 报错信息 |
|---|---|---|---|
| NameError | 变量未定义直接使用 |
print(num) |
NameError: name ‘num’ is not defined |
| NameError | 函数未定义就调用 |
test() |
NameError: name ‘test’ is not defined |
| NameError | 局部变量作用域限制 |
def f():
a=1
f()
print(a)
|
NameError: name ‘a’ is not defined |
三、数据类型相关错误 TypeError(类型不匹配操作)
不同数据类型不能进行该运算/调用,类型冲突
| 报错类型 | 触发原因 | 示例错误代码 | 报错信息 |
|---|---|---|---|
| TypeError | 数字和字符串直接相加 |
print(10 + "20") |
TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’ |
| TypeError | 函数传参数量不匹配 |
def add(a):return a+1 add(1,2) |
TypeError: add() takes 1 positional argument but 2 were given |
| TypeError | 不可迭代对象遍历 |
for i in 123:print(i) |
TypeError: ‘int’ object is not iterable |
| TypeError | 数字不可下标取值 |
a=99;print(a[0]) |
TypeError: ‘int’ object is not subscriptable |
四、索引/键取值错误(容器操作:列表、字典、字符串)
4.1 IndexError 下标越界
列表、字符串下标超出有效范围
lst = [1,2,3] print(lst[5])
报错:IndexError: list index out of range
4.2 KeyError 字典无对应键
访问字典不存在的key
d = {"name":"小明"}
print(d["age"])
报错:KeyError: 'age'
4.3 ValueError 值合法但不符合函数要求
数据类型正确,但数值内容不符合使用规则
| 示例代码 | 报错信息 |
|---|---|
int("abc")
|
ValueError: invalid literal for int() with base 10: ‘abc’ |
lst = [1,7,9]; lst.index(5) |
ValueError: list.index(x): x not in list(两数之和遇到的报错) |
五、零除与数学运算错误 ArithmeticError
ZeroDivisionError 除以0
print(10 / 0)
报错:ZeroDivisionError: division by zero
六、文件IO操作错误 OSError/FileNotFoundError
| 报错类型 | 错误代码 | 报错信息 |
|---|---|---|
| FileNotFoundError |
f = open("test.txt","r")
文件不存在 |
FileNotFoundError: [Errno 2] No such file or directory: ‘test.txt’ |
| PermissionError | 无权限读写目标文件 | PermissionError: [Errno 13] Permission denied |
七、模块导入错误 ImportError/ModuleNotFoundError
import xxxxxx
报错:ModuleNotFoundError: No module named 'xxxxxx'
八、属性访问错误 AttributeError
lst = [1,2] lst.append2(3) # 或 a = None a.split()
报错:AttributeError: 'list' object has no attribute 'append2'
九、循环迭代相关 StopIteration
迭代器无更多元素仍取值
it = iter([1]) next(it) next(it)
报错:StopIteration
十、内存/递归限制 RecursionError
递归深度超过Python默认限制
def f():
f()
f()
报错:RecursionError: maximum recursion depth exceeded
十一、运行时通用异常 Exception 补充
1. AssertionError:断言失败
a = 5 assert a > 10
报错:AssertionError
2. IndentationError(SyntaxError子类):缩进错误
def test(): print(1)
报错:IndentationError: expected an indented block
3. UnicodeDecodeError:文件编码解码失败
open("中文文件.txt", encoding="ascii").read()
报错:UnicodeDecodeError: 'ascii' codec can't decode byte
十二、逻辑无报错但输出None(高频踩坑)
不属于程序异常,但业务结果错误,两数之和题目常遇到
原因
函数仅print,没有return返回数据
def twoSum(nums,target):
for i in range(len(nums)):
print([i,i+1])
# 调用接收结果
res = twoSum([1,2],3)
print(res) # 输出 None