使用yfinance下载NOK小时级数据时遭遇JSONDecodeError求助
问题描述
运行以下代码获取诺基亚(NOK)2020年11月30日至2021年9月30日的小时级历史数据:
import yfinance as yf df = yf.Ticker("NOK").history(start_date="2020-11-30", end_date="2021-09-30", interval="1h")
触发JSONDecodeError,报错堆栈如下:
--------------------------------------------------------------------------- JSONDecodeError Traceback (most recent call last) <ipython-input-15-c5289e094c7b> in <module> 1 import yfinance as yf 2 ----> 3 df = yf.Ticker("NOK").history(start_date="2020-11-30", end_date="2021-09-30", interval="1h") D:\Programme\Python\Anaconda\lib\site-packages\yfinance\base.py in history(self, period, interval, start, end, prepost, actions, auto_adjust, back_adjust, proxy, rounding, tz, **kwargs) 155 # Every valid ticker has a timezone. Missing = problem 156 shared._DFS[self.ticker] = utils.empty_df() --> 157 shared._ERRORS[self.ticker] = err_msg 158 if "many" not in kwargs and debug_mode: 159 print('- %s: %s' % (self.ticker, err_msg)) D:\Programme\Python\Anaconda\lib\site-packages\requests\models.py in json(self,** kwargs) 896 if self.status_code == 0 or self.raw is None: 897 self._content = None --> 898 else: 899 self._content = b"".join(self.iter_content(CONTENT_CHUNK_SIZE)) or b"" 900 D:\Programme\Python\Anaconda\lib\json\__init__.py in loads(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw) 355 parse_int is None and parse_float is None and 356 parse_constant is None and object_pairs_hook is None and not kw): --> 357 return _default_decoder.decode(s) 358 if cls is None: 359 cls = JSONDecoder D:\Programme\Python\Anaconda\lib\json\decoder.py in decode(self, s, _w) 335 336 """ --> 337 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 338 end = _w(s, end).end() 339 if end != len(s): D:\Programme\Python\Anaconda\lib\json\decoder.py in raw_decode(self, s, idx) 353 obj, end = self.scan_once(s, idx) 354 except StopIteration as err: --> 355 raise JSONDecodeError("Expecting value", s, err.value) from None 356 return obj, end JSONDecodeError: Expecting value: line 1 column 1 (char 0)
已尝试执行以下命令升级yfinance库,但问题未解决:
pip install yfinance --upgrade --no-cache-dir
同时怀疑该时间段的小时级数据是否不存在,寻求可行解决方案。
解决方案
1. 明确小时级数据的可用性限制
yfinance对小时级数据的获取有严格时间范围约束:仅能获取最近7天的小时数据,或通过period参数获取最长约1个月的历史小时数据。你请求的2020-2021年时间段远超出这个范围,这是导致报错的核心原因。
2. 调整需求或更换数据源
- 如果必须获取该时段的小时级数据,建议更换专业金融数据源(如Alpha Vantage、IEX Cloud等),这类平台支持更长时间范围的分钟/小时级历史数据查询。
- 若可接受降级为日线数据,修改
interval参数即可正常获取目标时段的NOK数据:import yfinance as yf df = yf.Ticker("NOK").history(start="2020-11-30", end="2021-09-30", interval="1d")
3. 针对JSONDecodeError的额外排查
如果需要测试短时间范围的小时数据获取,可尝试以下操作:
- 检查网络连接,确保能正常访问Yahoo Finance(部分地区可能需要代理)
- 手动清除yfinance缓存:删除缓存目录(通常为
~/.cache/yfinance或Anaconda环境对应的缓存路径) - 使用
period参数替代start/end测试最近的小时数据:df = yf.Ticker("NOK").history(period="7d", interval="1h")
内容的提问来源于stack exchange,提问作者reCaptcha
相关产品推荐
相关产品推荐

