如何校验pandas Morningstar API中DataReader的股票代码有效性?
解决Morningstar API股票代码校验问题
这个问题确实挺闹心的——输入错误代码后程序一直卡着,完全摸不着头脑对吧?我来分享两个实用的解决方案,帮你提前校验股票代码的有效性:
方法一:超时机制+异常捕获(推荐)
直接利用DataReader的请求过程,通过设置超时时间和捕获异常来判断代码是否有效,彻底避免程序无限等待:
import pandas_datareader.data as web from requests.exceptions import Timeout, HTTPError def validate_ticker(ticker, start_date, end_date): # 统一转成大写,避免大小写敏感导致的无效请求 ticker = ticker.upper() try: # 设置10秒超时,超过时间直接抛出异常终止请求 df = web.DataReader(ticker, 'morningstar', start_date, end_date, timeout=10) # 若返回空数据,也判定为无效代码(正常股票至少有几天数据) return not df.empty except (Timeout, HTTPError, ValueError) as err: print(f"代码{ticker}校验失败:{str(err)}") return False # 示例使用 start = '2023-01-01' end = '2023-01-05' print(validate_ticker('TSLA', start, end)) # 输出True print(validate_ticker('BADTICKER', start, end)) # 输出False
为什么这个方法好用?
- 无需额外维护代码列表,实时通过API验证有效性
- 超时设置彻底解决了错误代码导致的程序卡住问题
- 捕获多种异常场景(超时、HTTP错误、无效数据返回),覆盖大部分出错情况
方法二:本地代码列表校验
如果你需要频繁做校验,可以先获取Morningstar支持的所有股票代码列表,存为本地集合,之后直接做本地校验:
# 假设你已经通过合法渠道获取了Morningstar的有效代码集合 valid_tickers = {'TSLA', 'AAPL', 'MSFT', 'AMZN'} # 实际需替换为完整列表 def validate_ticker(ticker): return ticker.upper() in valid_tickers # 示例使用 print(validate_ticker('TSLA')) # 输出True print(validate_ticker('BADTICKER')) # 输出False
注意事项
- 代码列表需要定期更新,避免因为股票退市、新增导致校验不准确
- 适合校验频率极高的场景,能节省网络请求时间
内容的提问来源于stack exchange,提问作者Lam
相关产品推荐
相关产品推荐

