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

已导入datetime仍报NameError错误的解决方案求助

解决NameError: name 'datetime' is not defined问题(已导入datetime模块仍报错)

问题根源

你的代码里混合使用了datetime.today()、date.today()、time(9,15)这类调用,说明导入方式不一致:要么是导入了datetime模块但未正确引用其子类,要么是单独导入了date/time类却没导入datetime类本身,导致代码里的datetime名称未被定义。

修复方案

提供两种统一的导入和调用方式,选其一即可:

方案1:导入整个datetime模块,所有调用加模块前缀

import datetime
import schedule
from time import sleep

def job():
    # 补充你的job函数实现
    pass

while True:
    # 统一用datetime.date调用today方法
    if (datetime.date.today().weekday() != 6) & (datetime.date.today().weekday() != 5):
        hours = [9,10,11,12,13,14,15]
        minutes = [0,15,30,45]

        for hour in hours:
            for minute in minutes:
                schedule_time = datetime.time(hour, minute)
                if (schedule_time >= datetime.time(9,15)) & (schedule_time <= datetime.time(15,15)):
                    schedule.every().day.at(str(schedule_time)).do(job)

        while True:
            schedule.run_pending()
            sleep(300)

    else:
        now_datetime = datetime.datetime.now()
        # 用timedelta避免跨月/跨年的day+1报错问题
        next_date = now_datetime.date() + datetime.timedelta(days=1)
        next_datetime = datetime.datetime.combine(next_date, datetime.time(9,15))
        sleep((next_datetime - now_datetime).seconds)

方案2:明确导入需要的类,直接调用类名

from datetime import datetime, date, time, timedelta
import schedule
from time import sleep

def job():
    # 补充你的job函数实现
    pass

while True:
    if (date.today().weekday() != 6) & (date.today().weekday() != 5):
        hours = [9,10,11,12,13,14,15]
        minutes = [0,15,30,45]

        for hour in hours:
            for minute in minutes:
                schedule_time = time(hour, minute)
                if (schedule_time >= time(9,15)) & (schedule_time <= time(15,15)):
                    schedule.every().day.at(str(schedule_time)).do(job)

        while True:
            schedule.run_pending()
            sleep(300)

    else:
        now_datetime = datetime.now()
        next_date = now_datetime.date() + timedelta(days=1)
        next_datetime = datetime.combine(next_date, time(9,15))
        sleep((next_datetime - now_datetime).seconds)

额外提示

  • 原代码中now_datetime.day +1存在隐患:如果当天是月底最后一天,day+1会超出当月天数报错,建议用timedelta(days=1)来计算次日日期。
  • 确保你的job函数已经定义,否则后续调用do(job)会出现新的NameError。

内容的提问来源于stack exchange,提问作者santhosh Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:41:18