You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

运行含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

火山引擎 最新活动