3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)的研究环境中,出现 AttributeError: 'function' object has no attribute 'roe' 的报错,通常是因为命名空间冲突或导入方式不正确导致的。
在您的代码中,您使用了 import jqdata,此时直接调用 indicator.roe 会导致 Python 无法正确识别 indicator 这个 SQLAlchemy 表对象(它可能被当前环境中的某个同名函数覆盖,或者必须通过 jqdata.indicator 来显式调用)。
方法一:使用 from jqdata import *(推荐)
这是聚宽官方文档中最标准的导入方式,它会将 query、indicator、valuation 等常用的财务表对象直接引入到当前命名空间中。
# 正确的导入方式
from jqdata import *
# 构建查询语句
q = query(indicator.roe).filter(indicator.code.in_(['000001.XSHE']))
# 获取财务数据
df = get_fundamentals(q)
print(df)
方法二:显式指定 jqdata. 前缀
如果您坚持使用 import jqdata,则在调用表对象时需要加上 jqdata. 前缀:
import jqdata
# 显式调用 jqdata.indicator
q = jqdata.query(jqdata.indicator.roe).filter(jqdata.indicator.code.in_(['000001.XSHE']))
df = jqdata.get_fundamentals(q)
print(df)
indicator、query、valuation 等聚宽内置关键字。get_fundamentals 时,如果不指定 date 或 statDate 参数,默认会获取最新一期的财务数据。为了避免未来函数或保证回测/研究结果的一致性,建议显式传入 date 参数(例如 date='2023-01-01')。