Python运行DBSCAN参数遍历代码报'list' object is not callable如何解决
报错原因排查
核心问题定位
你遇到的报错本质是Python内置的range函数被你覆盖成了列表变量:
TypeError: 'list' object is not callable
报错指向代码第6行的range(1, eps_intervals)调用,说明当前运行环境里的range已经不是原生生成序列的内置函数,而是一个你之前提前定义过的列表对象,列表不能像函数一样加括号调用,因此抛出该错误。
排查&修复方案
- 检查当前代码的前置部分,有没有出现
range = [xxx,xxx]这类把range作为变量名赋值的语句,把该变量名修改为其他不与内置函数重名的名称即可,比如range_list、eps_range。 - 如果是在Jupyter Notebook等交互式环境运行,检查之前执行过的单元格有没有给
range赋过值,重启内核重新运行代码即可验证问题是否解决。 - 补充两个额外的修复点避免后续出现其他报错:
- 代码开头需要先导入依赖库,确认你已经添加了以下导入语句:
import numpy as np from sklearn.cluster import DBSCAN- 当前内层循环
for j in range(max_pts)会出现j=0的情况,而DBSCAN的min_samples参数不允许为0,建议把内层循环修改为for j in range(1, max_pts)。
验证方法
你可以在循环前添加一行打印代码确认range的类型:
print(type(range), range)
如果输出结果不是<class 'builtin_function_or_method'>,就可以确认是range被覆盖的问题。
内容的提问来源于stack exchange,提问作者lanceparth
相关产品推荐
相关产品推荐

