You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

第二次执行时报TypeError: 'YahooSecurity'对象不可调用的原因

问题:循环生成图表时出现 TypeError: 'YahooSecurity' object is not callable 错误

我用pypf包写了循环生成图表的代码,第一次执行能正常输出,但第二次执行就报错。代码如下:

import os
import time
from pypf.chart import PFChart
from pypf.instrument import YahooSecurity
symbol  = "TATAPOWER","TATAMOTORS"
for i in symbol:
    print(i)
    YahooSecurity = YahooSecurity(i, True, True, '1d',1)
    print(type(YahooSecurity))
    chart = PFChart(YahooSecurity,0.01,1,'C',3,True,True,True)
    chart.create_chart(dump=True)
    time.sleep(20)

注:"TATAPOWER"和"TATAMOTORS"是本地已有的CSV数据文件。

报错信息:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In [38], line 9
      7 for i in symbol:
      8     print(i)
----> 9     YahooSecurity = YahooSecurity(i, True, True, '1d',1)
     10     print(type(YahooSecurity))
     11     chart = PFChart(YahooSecurity,0.01,1,'C',3,True,True,True)

TypeError: 'YahooSecurity' object is not callable

我想一次性生成多个图表,不知道问题出在哪。


问题原因

你在循环里犯了变量名冲突的错误:

  • 一开始导入了YahooSecurity类
  • 第一次循环时,YahooSecurity = YahooSecurity(...)把类名覆盖成了这个类的实例对象
  • 第二次循环再调用YahooSecurity(...)时,实际是在调用一个实例对象,而实例无法像类那样被调用创建新对象,因此抛出错误。

解决方案

把实例变量名改成和类名不同的名称,比如用小写开头的yahoo_security,避免覆盖原类的引用。

修改后的代码:

import os
import time
from pypf.chart import PFChart
from pypf.instrument import YahooSecurity
symbol  = "TATAPOWER","TATAMOTORS"
for i in symbol:
    print(i)
    # 更改变量名,不再覆盖原类引用
    yahoo_security = YahooSecurity(i, True, True, '1d',1)
    print(type(yahoo_security))
    chart = PFChart(yahoo_security,0.01,1,'C',3,True,True,True)
    chart.create_chart(dump=True)
    time.sleep(20)

这样循环每次都会调用原YahooSecurity类创建新实例,就不会再报错了。

内容的提问来源于stack exchange,提问作者Amit Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:45:36