Python运行报错TypeError: '<'不支持int与types.GenericAlias实例比较
TypeError: 'int'和'types.GenericAlias'实例不支持小于比较的排查修复
错误根因
报错直接来自searchInsert函数中递归调用的传参错误:
- 调用
inserter时第一个参数传入了Python内置类型list,而非实际需要处理的入参nums。Python 3.9+中内置泛型类型本身属于types.GenericAlias实例,不是存储数值的序列对象。 - 递归函数执行到
target < nums[mid]行时,此处的nums是内置list类型,取下标得到的是泛型相关对象,和int类型的target做比较时就会抛出该类型错误。
代码另外存在3处逻辑bug,会导致修复传参后结果依然不符合预期:
- 递归调用
inserter时未加return,递归得到的返回值无法向上传递,最终函数会返回None - 递归终止条件错误:当查找区间为空(
first >= last)时直接返回0,无法返回正确的插入位置 - 测试调用时传入的序列是元组,虽然不触发报错,但和搜索插入位置的常规入参类型(列表)不一致,容易引发混淆
修复后代码
def inserter(nums, first, last, target): if first > last: return first mid = (first + last) // 2 if nums[mid] == target: return mid elif target < nums[mid]: return inserter(nums, first, mid - 1, target) else: return inserter(nums, mid + 1, last, target) def searchInsert(nums, target): if target < nums[0]: return 0 elif target > nums[-1]: return len(nums) return inserter(nums, 0, len(nums) - 1, target) # 测试:3插入[2,4,6,8]的正确位置是索引1 print(searchInsert([2, 4, 6, 8], 3))
运行上述代码会正确输出1,无类型报错。
内容的提问来源于stack exchange,提问作者Birinder Singh
相关产品推荐
相关产品推荐

