python3 TypeError: ‘type‘ object is not subscriptable
一、报错根源原本以为是类型错误后来仔细一看才知道是列表名称写错了。汗改为list1[2],就好了list1 [Google, Runoob, 1997, 2000]; list2 [1, 2, 3, 4, 5 ]; list3 [a, b, c, d]; print (第三个元素为 : , list[2]); list[2] 2001; print (更新后的第三个元素为 : , list[2]); 控制台 print (第三个元素为 : , list[2]); TypeError: type object is not subscriptable二、同类报错通用 4 种原因 排查步骤1. 变量名误用内置关键字你本次故障最高发误用list/dict/set/tuple/str作为变量名漏写数字、写错名字调用时变成原生类型报错行定位报错提示xxx[下标]先核对中括号前面的名字向上查找代码查看有没有定义同名列表 / 字典变量名称写错、少数字符、序号写错修正变量名。2. 低版本 Python 泛型注解写法错误次高发list[int]泛型语法仅 3.9 支持3.8 及以下直接报错解决方案头部导入from typing import List,Dict。3. 变量被覆盖赋值成类型对象前面代码把变量赋值成类arr list后续arr[0]报错排查打印print(type(arr))查看变量实际类型。4. 误把类名当实例对象调用下标只创建了类没有实例化class Test:pass Test[0] # Test是类不是实例报错排查缺少obj Test()实例化步骤。三、快速调试排查步骤实操流程定位报错行根据报错栈找到变量[下标]所在代码打印类型在报错行上方加print(type(变量名))输出class type→ 变量是系统类型 / 类名名称写错或被覆盖输出class list→ 下标越界 / 空列表报索引错误而非本异常向上检索变量定义全文搜索变量名核对定义名称和使用名称是否一致修正改名、补全变量名、实例化对象。四、优化后完整可用代码list1 [Google, Runoob, 1997, 2000] list2 [1, 2, 3, 4, 5] list3 [a, b, c, d] print(第三个元素为 : , list1[2]) list1[2] 2001 print(更新后的第三个元素为 : , list1[2])运行结果第三个元素为 : 1997 更新后的第三个元素为 : 2001