在for循环中声明类的实例:Python
我一直在从事一个涉及股票市场的项目,并为此创建了自己的类,但是当我运行这段代码时,我得到了一个错误在for循环中声明类的实例:Python,python,pandas-datareader,Python,Pandas Datareader,我一直在从事一个涉及股票市场的项目,并为此创建了自己的类,但是当我运行这段代码时,我得到了一个错误 import stock_class as st for i in names: string = str(i) stonk = st.stock(string, datetime.datetime(2016,12,31),datetime.datetime.now()) wSTD = stonk.standard_deviation() * weight[0] 当我在
import stock_class as st
for i in names:
string = str(i)
stonk = st.stock(string, datetime.datetime(2016,12,31),datetime.datetime.now())
wSTD = stonk.standard_deviation() * weight[0]
当我在循环之外运行相同的代码时,它工作得很好,所以我认为这可能是一个奇怪的python问题,在这里,您不能用迭代变量声明实例类。不管看起来有多奇怪。以下是我在运行以下代码时遇到的错误:
pandas_datareader._utils.RemoteDataError: No data fetched for symbol CHOLF using YahooDailyReader
如果有人需要进一步的信息,请告诉我,谢谢
这是我创建并命名的图书馆:
import numpy as np
import pandas as pd
import yfinance as yf
import datetime as datetime
import pandas_datareader.data as web
import os
import math
class stock:
def __init__(self, name, start, end):
self.name = name #string
self.start = start
self.end = end # datetime funtion
def history_data(self):
hist = web.DataReader(self.name,'yahoo',self.start, self.end)
return hist
def returnP(self):
stonk = self.history_data()
close = stonk['Close']
returnlist = []
for i in range(len(close)):
if i != 0:
returnVal = (close[i]/close[i-1])-1
returnlist.append(returnVal)
else:
returnlist.append(0)
stonk['Return'] = returnlist #hopefully places a new column for the return rate
return stonk
def standard_deviation(self):
stonk = self.returnP()
array = []
mean = sum(stonk['Return'])/stonk.count()['Return']
for i in range(stonk.count()['Return']):
array.append((stonk['Return'][i] - mean)**2)
std = math.sqrt(sum(array)/len(array))
return std
def cum_return(self):
stonk = self.returnP()
stonk['Cumreturn'] = (stonk['Return']+1).cumprod()
return stonk
def yfticker(self): #should not be called by user
stonk = yf.Ticker(self.name)
info = stonk.info
return info
def PEG(self):
info = self.yfticker()
PEG = info['pegRatio']
return PEG
def FPE(self):
info = self.yfticker()
FPE = info['forwardPE']
return FPE
def price_book(self):
info = self.yfticker()
priceToBook = info['priceToBook']
return priceToBook
如前所述,此代码自身工作,下面是buy()函数中发生错误的代码
我希望我的编辑提供了足够的信息在for循环的每次迭代中创建该类的对象似乎没有什么错。。。它更可能是关于股票市场的回报价值,而不是对象 只是为了向您展示您可以在循环内创建对象:
class Kid:
def __init__(self, age, name, city):
self.age = age
self.name = name
self.city = city
def AgeIn5Years(self):
return self.age + 5
kids = [Kid(i, f'Jhon {i}', 'London') for i in range(11, 16)]
[print(kid.AgeIn5Years()) for kid in kids]
在幕后没有任何事情会给你带来意想不到的行为。您对
i
的使用是每次迭代中唯一隐式更改的内容,只需依次使用iterablename
中的每个值即可。您应该提供更多信息,包括1)带有堆栈跟踪的完整错误,2)您的stock_类
模块的代码,3)使用pandas\u数据读取器
和YahooDailyReader
的代码,以及4)名称的内容-在你的问题中,没有任何东西是可以帮助你的。”所以我认为这可能是一件奇怪的python事情,你不能用一个迭代变量声明一个实例类“不,那绝对不是
class Kid:
def __init__(self, age, name, city):
self.age = age
self.name = name
self.city = city
def AgeIn5Years(self):
return self.age + 5
kids = [Kid(i, f'Jhon {i}', 'London') for i in range(11, 16)]
[print(kid.AgeIn5Years()) for kid in kids]