使用xbbg获取特定日期标的日内价格时遇KeyError 'allday'问题
解决xbbg库中KeyError 'allday'的问题
错误原因分析
const.exch_info(tkr)返回的对象大概率是pandas Series/DataFrame,而非字典,直接用字典索引['allday']会触发KeyError。- 部分标的的交易所配置可能本身就没有'allday'字段,返回结构与预期不符。
- 原代码存在缩进错误、拼写错误(
Genearate应为Generate),也会导致执行异常。
修复后的代码
from xbbg import blp import datetime from xbbg import const import pandas as pd def earlierStartConfig(row): tkr = row["ticker"] dtSession = row["start_date"] minsEarlier = 1 exch_config = const.exch_info(tkr) # 将Series格式的配置转为字典,统一索引方式 if isinstance(exch_config, pd.Series): exch_config = exch_config.to_dict() # 提前检查'allday'字段是否存在 if 'allday' not in exch_config: raise ValueError(f"标的{tkr}的交易所配置中未找到'allday'字段") session = exch_config['allday'].copy() # 复制配置避免修改原数据 hours, mins = (int(s) for s in session[0].split(':')) # 调整开盘时间并格式化 adjusted_start = dtSession + datetime.timedelta(hours=hours, minutes=mins - minsEarlier) session[0] = adjusted_start.strftime('%H:%M') # 生成新的配置DataFrame return pd.DataFrame([{'tz': exch_config['tz'], 'allday': session}], index=[exch_config['name']])
关键修复点
- 增加类型转换:处理
exch_info返回的Series对象,转为字典后再进行字段索引。 - 字段存在性校验:提前判断'allday'是否存在,抛出明确的错误提示。
- 复制配置数据:使用
copy()避免修改原交易所配置的全局数据。 - 修正语法错误:调整代码缩进、修正拼写错误,保证代码可正常执行。
内容的提问来源于stack exchange,提问作者ridz
相关产品推荐
相关产品推荐

