You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:42:08