Python中Yfinance API获取外汇汇率失效问题排查请求
Yfinance获取外汇汇率报401错误的排查与修复
错误原因
- Yahoo Finance公开API接口权限调整,原直接请求
/v7/finance/quote的方式现在需要身份验证,未携带验证信息的请求会返回401 Unauthorized。 - 旧版本yfinance未适配Yahoo的新验证机制,导致调用
.info['regularMarketPrice']时触发未授权错误。
修复方案
1. 升级yfinance到最新版本
新版本yfinance已针对Yahoo的验证逻辑做了适配,执行以下命令升级:
pip install --upgrade yfinance
2. 替换汇率获取方式
避免直接使用.info字典获取价格,改用新版本支持的fast_info或download方法,示例代码如下:
import yfinance as yf import pandas as pd base_currency = 'GBP' currencies = df['Currency'].unique().tolist() fx_data = {} for currency in currencies: ticker = f"{currency}{base_currency}=X" # 优先使用fast_info获取实时价格(新版本支持) try: fx_rate = yf.Ticker(ticker).fast_info['lastPrice'] fx_data[currency] = fx_rate except Exception as e: # 备选方案:通过download获取单日收盘价 data = yf.download(ticker, period='1d', progress=False) if not data.empty: fx_rate = data['Close'].iloc[-1] fx_data[currency] = fx_rate else: fx_data[currency] = None # 标记获取失败的币种
注意事项
- 升级后可通过
pip show yfinance确认版本,推荐使用0.2.30及以上版本。 - 部分小众外汇对可能无实时数据,添加异常处理可避免程序崩溃。
内容的提问来源于stack exchange,提问作者Cla Rosie
相关产品推荐
相关产品推荐

