You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取下一个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 12:50:27