Python报错TypeError: 'tuple'对象不可调用——for循环内列表推导式问题
问题:列表推导式中触发TypeError: 'tuple' object is not callable错误
你尝试用列表推导式结合f-string生成字符串列表,编写了如下代码:
features = [("month", (1, 12)), ("day_of_year", (1, 365))] for feature, range in features: cols= [f"transformed_{feature}_period_{i:02d}" for i in range(12)]
运行时出现如下错误:
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[4], line 3 1 features = [("month", (1, 12)), ("day_of_year", (1, 365))] 2 for feature, range in features: ----> 3 cols= [f"transformed_{feature}_period_{i:02d}" for i in range(12)] TypeError: 'tuple' object is not callable
即使移除字符串中的变量,修改为以下代码,仍会触发相同错误:
for feature, range in features: cols= ["transformed_feature_period" for i in range(12)]
原因分析
核心问题是你在for循环中使用了range作为变量名,直接覆盖了Python内置的range()函数。
在循环迭代features时,每次取到的第二个元素是元组(比如(1, 12)),这个元组会被赋值给变量range。当你在列表推导式中调用range(12)时,实际上是在尝试调用这个元组对象——而元组是不可调用的,因此触发了TypeError。
这也是为什么移除f-string中的变量后错误依然存在:问题根源不在字符串模板,而在range(12)这一行的调用对象已经被替换成了元组。
解决方案
只需要把循环中的变量名从range改成其他名称(比如feature_range),避免覆盖内置函数即可:
features = [("month", (1, 12)), ("day_of_year", (1, 365))] for feature, feature_range in features: cols = [f"transformed_{feature}_period_{i:02d}" for i in range(12)]
这样列表推导式中调用的range(12)就会指向Python内置的range()函数,不会再触发错误。
内容的提问来源于stack exchange,提问作者RicardoC
相关产品推荐
相关产品推荐

