🚀 AI 一键生成 joinquant 策略代码

JoinQuant 研究环境中 get_security_info 报错 AttributeError: 'NoneType' object has no attribute 'display_name' 怎么办?

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

问题描述

get_security_info报错NoneType

研究环境中使用

def chnname(code):
stockName = get_security_info(code).display_name
print(stockName)
return stockName

会报错:
< ipython-input-1-ca209701c582> in chnname(code)
32 """
33 def chnname(code):
---> 34 stockName = get_security_info(code).display_name
35 print(stockName)
36 return stockName

AttributeError: 'NoneType' object has no attribute 'display_name'

同样的写法在在线策略编辑器里边就可以正常运行,请问有人知道为什么嘛?谢谢(研究环境已经重启过没用)

解决方案

报错原因分析

在 JoinQuant 中,出现 AttributeError: 'NoneType' object has no attribute 'display_name' 的根本原因是 get_security_info(code) 函数没有找到对应的标的信息,从而返回了 None

为什么在策略编辑器中正常,而在研究环境中报错呢?这通常是因为传入的 code 格式不规范

JoinQuant 的 API 严格要求股票代码带有市场后缀(例如平安银行必须是 '000001.XSHE',贵州茅台必须是 '600519.XSHG')。如果在研究环境中调用 chnname(code) 时,传入的仅仅是 '000001' 或者 'SZ000001'get_security_info 无法识别,就会返回 None

解决方案

为了避免因为代码格式不规范导致的报错,JoinQuant 提供了一个非常实用的 API:normalize_code()。它可以将各种常见形式的股票代码(如 '000001', 'SZ000001', '000001.sz')自动转换为聚宽标准格式('000001.XSHE')。

您只需要在调用 get_security_info 之前,先用 normalize_code 处理一下传入的 code 即可。

修改后的代码示例

from jqdata import *

def chnname(code):
    # 1. 将传入的 code 标准化为聚宽支持的格式
    standard_code = normalize_code(code)
    
    # 2. 获取标的信息
    security_info = get_security_info(standard_code)
    
    # 3. 增加容错判断,防止传入完全无效的代码
    if security_info is None:
        print(f"警告:无法找到代码 {code} 对应的标的信息")
        return None
        
    stockName = security_info.display_name
    print(stockName)
    return stockName

# 测试调用
chnname('000001')      # 即使不带后缀也能正常解析为平安银行
chnname('600519.SH')   # 也能正常解析为贵州茅台

总结

  • 核心问题:传入的股票代码缺少 .XSHE.XSHG 后缀,导致 API 查无此股。
  • 最佳实践:在处理外部输入或不确定的股票代码列表时,养成先调用 normalize_code(code) 的习惯,可以有效避免此类 NoneType 报错。