第二次执行时报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
相关产品推荐
相关产品推荐

