获取下一个NYSE交易日的Python代码报错求助:'NYSEExchangeCalendar'对象无'is_session'属性
获取下一个NYSE交易日的Python代码报错求助:'NYSEExchangeCalendar'对象无'is_session'属性
看起来你踩了个API信息错误的坑——Google AI给的代码里用的is_session方法,在当前版本的pandas-market-calendars库中根本不存在,这就是你两次运行都报错的核心原因。我来帮你修正代码,顺便讲下这个库的正确用法。
问题根源
pandas-market-calendars的官方API里,从来没有给日历对象提供过is_session这个方法,Google AI的回答应该是基于错误的信息或者不存在的旧版API文档。判断某个日期是否为NYSE交易日,我们需要用库提供的正确方式。
正确解决方案
这里给你两种靠谱的实现方式,任选其一即可:
方式一:直接用库自带的next_open方法(最简洁)
这个方法会自动帮你跳过所有非交易日(周末、节假日),不管当前日期是不是交易日,都能返回下一个交易日的开盘时间,完全不用自己写判断逻辑:
import pandas as pd import pandas_market_calendars as mcal # 初始化NYSE日历 nyse = mcal.get_calendar('NYSE') # 获取当前日期并设置NYSE对应的时区(必须带时区,否则会有匹配问题) today = pd.Timestamp.today().tz_localize('America/New_York') # 获取下一个交易日的开盘时间 next_trading_day = nyse.next_open(today) # 如果只需要日期字符串,格式化输出 print(next_trading_day.strftime('%Y-%m-%d'))
方式二:手动循环判断(贴近你之前的思路)
如果你还是想自己写循环逻辑,可以用valid_days方法来判断日期是否为有效交易日:
import pandas as pd import pandas_market_calendars as mcal from datetime import timedelta def get_next_trading_day(date): nyse = mcal.get_calendar('NYSE') # 把输入日期转为带NYSE时区的Timestamp对象 date = pd.Timestamp(date).tz_localize('America/New_York') while True: date += timedelta(days=1) # 检查当前日期是否在有效交易日列表中 if not nyse.valid_days(start_date=date, end_date=date).empty: return date.strftime('%Y-%m-%d') # 测试2024年圣诞节(非交易日,预期返回2024-12-26) next_trading_day = get_next_trading_day('2024-12-25') print(next_trading_day)
额外注意事项
- 先升级你的库到最新版本,避免版本差异导致的问题:
pip install --upgrade pandas-market-calendars - 所有日期操作一定要带时区!NYSE的时区是
America/New_York,如果你的日期不带时区,很可能会因为时区不匹配导致判断错误(比如你本地的“今天”可能已经是NYSE的“明天”)。
备注:内容来源于stack exchange,提问作者rumrum
相关产品推荐
相关产品推荐

