如何理解网站数据检索用例下的python中的断言?

问题描述 投票:0回答:1

我一直在尝试运行在github上找到的代码以检索yahoo财务数据,并不断遇到以下错误。

我已经检查了与Assert语句相关的文档,但在此处无法理解用例。

有人可以帮助我理解和修复代码吗?

谢谢!

def get_volatility_and_performance(symbol):
download_url = "https://query1.finance.yahoo.com/v7/finance/download/{}?period1={}&period2={}&interval=1d&events=history&crumb=a7pcO//zvcW".format(symbol, start_timestamp, end_timestamp)
lines = requests.get(download_url, cookies={'B': 'ft62erdtd45aci&b=8&s=6a'}).text.strip().split('\n')
assert lines[0].split(',')[0] == 'Date'
assert lines[0].split(',')[4] == 'Close'
prices = []
for line in lines[1:]:
    prices.append(float(line.split(',')[4]))
prices.reverse()
volatilities_in_window = []

for i in range(window_size):
    volatilities_in_window.append(math.log(prices[i] / prices[i+1]))

most_recent_date = datetime.strptime(lines[-1].split(',')[0], date_format).date()
assert (date.today() - most_recent_date).days <= 4, "today is {}, most recent trading day is {}".format(date.today(), most_recent_date)

return np.std(volatilities_in_window, ddof = 1) * np.sqrt(num_trading_days_per_year), prices[0] / prices[window_size] - 1.0



volatilities = []
performances = []
sum_inverse_volatility = 0.0
for symbol in symbols:
    volatility, performance = get_volatility_and_performance(symbol)
    sum_inverse_volatility += 1 / volatility
    volatilities.append(volatility)
    performances.append(performance)

print ("Portfolio: {}, as of {} (window size is {} days)".format(str(symbols), date.today().strftime('%Y-%m-%d'), window_size))
for i in range(len(symbols)):
    print ('{} allocation ratio: {:.2f}% (anualized volatility: {:.2f}%, performance: {:.2f}%)'.format(symbols[i], float(100 / (volatilities[i] * sum_inverse_volatility)), float(volatilities[i] * 100), float(performances[i] * 100)))

Error Message: Assertion Error

python python-requests assert yahoo-finance
1个回答
0
投票

感谢上述两个..整理他们的答案,以防将来有人发现这有帮助并关闭该线程。

如果声明的条件为假,则声明将引发错误。例如,在最后一个断言中,今天和most_recent_day之间的天数不能大于4天,如果大于4天,则会出现错误,程序将停止。

声明应谨慎使用。它适合测试,但不适用于生产代码。如果Python以优化(-O)运行,则所有assert语句都将被忽略。留下您可能未经检查且不受信任的输入。

© www.soinside.com 2019 - 2024. All rights reserved.