运行含numpy的Python代码时出现“numpy.ndarray object is not callable”错误求助
问题原因与解决方案
这个错误的核心原因是你把Python内置的open()函数名当成了变量名使用,导致后续调用open()时,实际调用的是你从CSV文件中读取的numpy数组,自然会抛出“numpy.ndarray object is not callable”的错误。
具体来看这段代码:
date, price, open = np.loadtxt('CARG.csv', delimiter=',', unpack=True, dtype='str')
这里你把第三个返回值命名为open,但open是Python用来打开文件的内置函数,这就把内置函数覆盖成了numpy数组。之后当你执行saveFile = open('newCSV', 'a')时,Python会认为你要调用这个数组,而数组是不能被“调用”的(只有函数/方法可以用()调用),所以报错。
解决方案
1. 重命名覆盖的变量
把从CSV读取的第三个变量改成其他名字,比如open_price(对应CSV里通常的“开盘价”字段):
date, price, open_price = np.loadtxt('CARG.csv', delimiter=',', unpack=True, dtype='str')
这样就不会覆盖内置的open()函数了。
2. 优化文件操作(可选但推荐)
你的代码在每次循环里都打开、关闭文件,这会降低效率。可以把文件打开操作放到循环外面,同时用更简洁的方式遍历数据:
import numpy as np def main(): try: # 重命名变量,避免覆盖内置函数 date, price, open_price = np.loadtxt('CARG.csv', delimiter=',', unpack=True, dtype='str') # 使用with语句自动管理文件生命周期,循环外打开一次即可 with open('newCSV', 'a') as saveFile: # 用zip同时遍历日期和价格,不用手动维护计数器x for eachDate, eachPrice in zip(date, price): saveLine = f"{eachDate},{eachPrice}\n" saveFile.write(saveLine) except Exception as e: print(e) main()
with语句会自动帮你关闭文件,避免忘记关闭导致的资源泄漏问题,zip()也让遍历逻辑更清晰。
内容的提问来源于stack exchange,提问作者Dushan




