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

解决 JoinQuant 中 get_extras 获取 is_st 报错 'NoneType' object has no attribute 的问题

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

问题描述

get_extras 报错

is_st = jq.get_extras(info='is_st', security_list=s, start_date='2021-01-01', end_date=current_dt,
df=False) 获取股票是否为ST会反馈 'NoneType' object has no attribute '...'的错误,请问是什么原因?

解决方案

在 JoinQuant (聚宽) 平台中使用 get_extras 函数获取股票是否为 ST 状态时,遇到 'NoneType' object has no attribute '...' 的错误,通常是由以下几个常见原因引起的:

1. current_dt 变量未定义或为 None

在您的代码中,end_date=current_dt 使用了 current_dt 变量。如果您是在**投资研究(Jupyter Notebook)**环境中运行这段代码,系统默认是没有 context 对象的,因此 current_dt 如果没有被显式赋值,就会是未定义或 None。这会导致内部日期处理函数报错。

解决方法:

  • 如果在回测/模拟交易环境中,请确保使用 context.current_dt
  • 如果在研究环境中,请手动指定一个日期字符串或 datetime 对象,例如:
import datetime
current_dt = datetime.datetime.now().strftime('%Y-%m-%d')
# 或者直接传入字符串
is_st = get_extras(info='is_st', security_list=s, start_date='2021-01-01', end_date='2023-10-01', df=False)

2. security_list (变量 s) 为空或为 None

如果传入的股票列表 sNone,或者在之前的代码逻辑中获取股票池失败导致 s 没有被正确赋值,get_extras 在遍历或处理这个列表时就会抛出 NoneType 异常。

解决方法:
在调用 get_extras 之前,打印一下 s,确保它是一个有效的股票代码列表(例如 ['000001.XSHE', '600000.XSHG'])。

print(s) # 检查 s 是否为 None 或空列表
if s is not None and len(s) > 0:
    is_st = get_extras(info='is_st', security_list=s, start_date='2021-01-01', end_date=current_dt, df=False)
else:
    print("股票列表为空!")

3. 模块调用方式错误

在聚宽官方的回测或研究环境中,通常直接调用 get_extras 即可,不需要加 jq. 前缀(除非您在本地使用 JQDataSDK 并且 import jqdatasdk as jq)。如果您在官网环境中写了 jq.get_extras,可能会因为 jq 对象未正确实例化而报错。

解决方法:
在官网环境中直接使用:

is_st = get_extras(info='is_st', security_list=s, start_date='2021-01-01', end_date=context.current_dt, df=False)

总结排查步骤:

  1. 确认运行环境(回测还是研究)。
  2. 检查 current_dt 是否有正确的时间值。
  3. 检查 s 是否为有效的 list
  4. 确认 API 的调用前缀是否正确。