Python字典迭代变量报错:'int'对象不可下标,Python2正常Python3异常求助
问题分析与解决指导
首先,这个TypeError: 'int' object is not subscriptable错误的核心原因很明确:你尝试对一个整数(int类型)使用下标访问操作(比如some_int[0]或者some_int[:]),但整数本身根本不支持这种操作——只有字符串、列表、字典这类可下标访问的对象才能用方括号取元素。
结合你的场景拆解细节:
- 你的字典
my_dict的键是整数(1、2、3),而你提到要“获取字典键的长度”——但整数没有“长度”这个属性,如果你在代码里写了类似key[0](想取键的某一部分)或者误用了下标操作,就会触发这个错误。 - 另外提个小坑:你把变量名设成了
max,但max是Python的内置函数(用来取最大值),虽然这不是当前错误的直接原因,但覆盖内置函数可能会引发后续意想不到的问题,建议改成max_target或者max_key这类名字。
至于为什么Python2里能正常运行,大概率是你在Python2中的代码和Python3版本有差异:
- 比如Python2里的字典键是字符串类型(比如
'1'而不是1),字符串支持下标访问和长度获取,所以不会报错; - 或者Python2里有某些隐式类型转换的行为,而Python3去掉了这些“不严谨”的转换,导致现在触发了类型错误。
具体解决步骤
- 定位出错代码行:找到抛出
TypeError的那一行,检查哪个变量是整数,却被你用了下标操作(比如xxx[0])。 - 修正“获取键长度”的逻辑:如果你的需求是获取键的位数(比如1是1位,100是3位),需要先把整数键转换成字符串再处理,比如:
key_length = len(str(key)) - 替换内置函数名变量:把
max改成其他合法变量名,避免覆盖内置函数。
示例修正代码
# 修正后的代码 my_dict = {1: 'a', 2: 'b', 3: 'c'} max_key = 3 # 替换max为max_key,避免覆盖内置函数 for key in my_dict.keys(): # 先把整数键转成字符串,再获取位数(也就是你说的“长度”) key_digit_count = len(str(key)) if key < max_key: # 达到max值前的操作 print(f"处理键 {key}(位数:{key_digit_count})- 未达到最大值") elif key == max_key: # 达到max值时的操作 print(f"处理键 {key}(位数:{key_digit_count})- 已达到最大值")
内容的提问来源于stack exchange,提问作者Life2Day
相关产品推荐
相关产品推荐

