typeerror 是运行时因类型不匹配触发的异常,常见于操作符误用(如字符串+数字)、对不可调用对象调用方法(如len(100))、参数类型不符(如int("12.5"))、类与实例混淆(如str.upper())及none参与运算等场景。

Python 中的 TypeError 表示操作或函数应用于了不支持该类型对象的值。它不是语法错误,而是在运行时因类型不匹配触发的异常,多数情况能快速定位并修复。
操作符与数据类型不兼容
这是最常见原因:用错操作符处理了不可操作的类型。例如:
- 用 + 拼接字符串和数字:
"age: " + 25→ 报错;应改为"age: " + str(25)或使用 f-string:f"age: {25}" - 对列表或字典使用 len() 是合法的,但对整数或 None 调用:
len(100)或len(None)就会触发 TypeError - 尝试用索引访问不可订阅对象:
42[0]、True[1]都会报错,因为 int 和 bool 不支持下标操作
函数参数类型不符合预期
内置函数或自定义函数对入参有隐含类型要求,传入错误类型就会报错:
-
int("12.5")→ 报错,因为 int() 不接受带小数点的字符串(可改用float()再转) -
json.loads(None)→ 报错,json.loads() 要求参数是字符串,传入 None 会提示“expected string or bytes-like object” - 调用自定义函数时,若函数内部假设参数是列表却传入了字符串,比如
my_func("hello"),而函数里写了arg.append(...),也会触发 TypeError
误把类名当实例或反向调用
混淆类(class)与其实例,或错误调用未绑定方法,也常引发 TypeError:
立即学习“Python免费学习笔记(深入)”;
-
str.upper()→ 报错,因为 str 是类,不能直接调用实例方法;应写成"hello".upper() -
list.sort([3,1,2])→ 报错,list.sort() 是实例方法,必须通过列表实例调用,如[3,1,2].sort();若想返回新排序列表,用sorted([3,1,2]) - 自定义类中,若忘记在方法定义中加
self参数,又通过实例调用,也会报 “takes 0 positional arguments but 1 was given” 类型的 TypeError
None 值参与运算或调用
None 是一个特殊单例对象,它不支持大多数运算和方法调用:
-
result = some_function()返回 None,后续又执行result.strip()或result + "text"→ 全部报 TypeError - 检查是否为 None 应使用
is None,而不是== None;更重要的是,在使用前主动判断:if result is not None: result.strip() - 函数缺少 return 语句,默认返回 None,容易被忽略——尤其在条件分支中只在部分路径 return,其余路径无返回值时
不复杂但容易忽略










