已导入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
相关产品推荐
相关产品推荐

