对于下面的代码,我总是得到相同的ValueError,我很难理解为什么会产生这个错误。据我所知,这个错误是当错误的值传递给函数时产生的,然而,我并不真正理解这个错误告诉我的是什么。我花了时间在网上和文档中搜索,但我无法理解我做错了什么。简单地说,为什么会生成这个错误?
我的代码:
import datetime
import ystockquote
def new_time(n):
fmt = "%Y%m%d"
end_date1 = datetime.datetime.strptime(n, fmt)
sixty_day = datetime.timedelta(days=60)
start_date = end_date1 - sixty_day
start_date1 = str(start_date)
start_date2 = start_date1[:4] + start_date1[5:7] + start_date1[8:10]
return start_date2
def average_atr():
print "Enter your stock symbol: "
symbol = raw_input(" ")
print "Enter the end date in (YYYYMMDD) format: "
end_date = raw_input(" ")
start_date = new_time(end_date)
initial_list = ystockquote.get_historical_prices('symbol', 'start_date', 'end_date')
def start():
average_atr()
start()下面是ystockquote的相关代码:
def get_historical_prices(symbol, start_date, end_date):
"""
Get historical prices for the given ticker symbol.
Date format is 'YYYYMMDD'
Returns a nested list.
"""
url = 'http://ichart.yahoo.com/table.csv?s=%s&' % symbol + \
'd=%s&' % str(int(end_date[4:6]) - 1) + \
'e=%s&' % str(int(end_date[6:8])) + \
'f=%s&' % str(int(end_date[0:4])) + \
'g=d&' + \
'a=%s&' % str(int(start_date[4:6]) - 1) + \
'b=%s&' % str(int(start_date[6:8])) + \
'c=%s&' % str(int(start_date[0:4])) + \
'ignore=.csv'
days = urllib.urlopen(url).readlines()
data = [day[:-2].split(',') for day in days]
return data请注意,上面的ystockquote代码并不是完整的代码。
发布于 2012-08-07 01:44:35
在function average_atr()中,更改以下行:
initial_list = ystockquote.get_historical_prices('symbol', 'start_date', 'end_date')至:
initial_list = ystockquote.get_historical_prices(symbol, start_date, end_date)在您当前的版本中,不是将变量传递给ystockquote.get_historical_prices(),而是传递带有变量名称的文字字符串。这会产生str(int(end_date[4:6]) - 1),其中变量end_date的值为'end_date',而'end_date'[4:6]的值为'da'。
发布于 2012-08-07 01:46:41
您正在将字符串“start_date”和“end_date”发送到函数get_historical_prices。该函数似乎希望传入实际的字符串日期值。只需删除此行中参数两边的引号:
initial_list = ystockquote.get_historical_prices('symbol', 'start_date', 'end_date')https://stackoverflow.com/questions/11833207
复制相似问题