🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

聚宽 get_industries 函数传入 date 参数报错 "unexpected keyword argument" 怎么办?

joinquant | 发布时间: 2026/6/3
以下内容由 EasyQuant 生成。

问题描述

get_industries函数解惑

get_industries函数,带上日期报错,有没有知道为什么的
get_industries(name='sw_l3')这样就可以正常读取数据,
get_industries(name='sw_l3',date=context.previous_date)
这样就会出现以下错误?为什么,我看说明里面可以查询指定日期的
TypeError: get_industries() got an unexpected keyword argument 'date'

解决方案

问题原因分析

在 JoinQuant(聚宽)的最新官方 API 文档中,get_industries 函数确实是支持 date 参数的,其标准定义为 get_industries(name, date=None)。传入 date 可以返回该日期当天存在的行业。

如果您在调用 get_industries(name='sw_l3', date=context.previous_date) 时遇到了 TypeError: get_industries() got an unexpected keyword argument 'date' 的错误,通常是由以下几种原因导致的:

  1. 运行环境版本较旧:您可能在使用本地的 jqdatasdk,且该库的版本较老,尚未包含支持 date 参数的更新。
  2. 使用了券商定制版平台:如果您使用的是某些券商的定制版聚宽(例如一创聚宽等),这些平台的底层 API 更新频率通常滞后于聚宽官网,可能仍在使用旧版不支持 date 参数的 API。
  3. 命名空间冲突:极少数情况下,可能导入了其他同名函数覆盖了聚宽官方的 API。

解决方案

方案一:升级本地 jqdatasdk(适用于本地研究环境)

如果您是在本地 Python 环境中使用 jqdatasdk,请打开命令行终端,运行以下命令升级到最新版本:

pip install -U jqdatasdk

升级后重启 Python 内核即可。

方案二:通过 Pandas 手动过滤日期(适用于无法升级的在线/券商环境)

如果您在无法升级底层 API 的环境中(如券商版聚宽),可以通过不传 date 参数获取所有历史行业列表,然后利用返回的 DataFrame 中的 start_date 字段自行进行日期过滤。

get_industries 返回的 DataFrame 包含 index (行业代码), name (行业名称), start_date (开始日期)。

替代代码示例:

import pandas as pd
from jqdata import *

def get_industries_by_date(name, target_date):
    # 1. 不传 date 参数,获取该分类下历史上所有的行业
    df = get_industries(name=name)
    
    # 2. 将 target_date 转换为 pandas 的 Timestamp 以便比较
    target_dt = pd.to_datetime(target_date)
    
    # 3. 过滤出 start_date 小于等于目标日期的行业
    # 注意:有些行业的 start_date 可能为空,需要做填充或丢弃处理
    df['start_date'] = pd.to_datetime(df['start_date'])
    valid_industries = df[df['start_date'] <= target_dt]
    
    return valid_industries

# 在策略的 handle_data 或其他函数中使用:
# target_date = context.previous_date
# my_industries = get_industries_by_date(name='sw_l3', target_date=target_date)
# print(my_industries)

通过这种方式,即使底层 API 不支持 date 参数,您依然可以准确获取到指定日期当时有效的行业列表,从而避免 TypeError 报错。