代码在Spyder运行正常但在Jupyter Notebook报list不可调用错误
错误原因
该报错并非Jupyter和Spyder的兼容性问题,根因是两类工具的运行上下文机制不同:
- Jupyter Notebook采用共享内核会话机制,同一个内核启动后,所有代码单元格的运行变量、上下文会全程保留。如果你在当前内核的其他单元格中,曾经将Python内置的
sum()函数赋值为列表类型(比如之前写过sum = []这类代码),就会直接覆盖内置的求和函数,后续执行sum(total_price)时,解释器会尝试把你之前定义的sum列表当作函数调用,自然抛出TypeError: 'list' object is not callable错误。 - Spyder默认每次运行独立脚本时,会启动全新的Python解释器进程,上下文干净无残留的自定义变量覆盖内置函数,所以代码可以正常运行。
修复方案
- 临时快速修复:重启当前Jupyter的内核,内核重启后会清空所有缓存的自定义变量,内置
sum()函数会恢复默认,重新运行代码即可正常执行。 - 不重启内核的修复:在当前运行的代码单元格顶部,先执行一行
del sum,手动删除被覆盖的sum自定义变量,即可恢复内置求和函数功能。 - 长期规避方案:写代码时不要用Python内置函数/类名(比如
sum、list、str、dict、int等)作为自定义变量名,从根源避免覆盖内置功能。
可正常运行的参考代码
# Grocery list and prices food = ["Tostino's Party Pizza", "Lay's Classic Potato Chips", "Pepsi Soda, 2 Liter", "Tyson Any'tizers Chicken Wings"] price = [1.50, 3.98, 1.98, 10.42] #Calculating sum of groceries total_price = [] for p in price: total_price.append(p) print(total_price) print(sum(total_price))
内容的提问来源于stack exchange,提问作者redleg_64
相关产品推荐
相关产品推荐

