如何使用Python Schedule库实现用户自定义时间的定时提醒?
用Python Schedule库实现自定义日期时间的提醒功能
原代码存在两个核心问题:一是无法通过变量直接访问Schedule库的星期属性,二是do()方法的调用方式错误(直接执行了print而非传入可调用对象)。以下是修正后的可行方案:
关键修正点
- 用
getattr()动态获取星期对应的调度器:Schedule库的星期方法均为小写(如tuesday),需将用户输入转为小写后通过getattr调用。 - 正确使用
do()方法:需传入可调用函数,而非直接执行函数,避免提醒提前触发。 - 增加输入验证:捕获异常处理格式错误的输入。
修正后的完整代码
import schedule import time def send_reminder(message): print(f"提醒:{message}") # 获取用户输入 remind_content = input("请输入提醒内容:") target_day = input("请输入星期几(如Monday/Tuesday,大小写均可):") target_time = input("请输入提醒时间(格式HH:MM,如21:35):") try: # 动态匹配星期调度器 weekly_schedule = getattr(schedule.every(), target_day.lower()) # 设置提醒时间与执行函数 weekly_schedule.at(target_time).do(send_reminder, remind_content) print(f"已成功设置提醒:每周{target_day} {target_time},内容:{remind_content}") # 持续运行调度检查 while True: schedule.run_pending() time.sleep(60) # 每分钟检查一次,降低资源占用 except AttributeError: print("错误:输入的星期名称格式不正确,请输入如Monday、Tuesday这类标准星期名称") except ValueError: print("错误:输入的时间格式不正确,请使用HH:MM格式(例如21:35)")
代码说明
- 动态调度器获取:
getattr(schedule.every(), target_day.lower())实现了根据用户输入的星期动态调用对应的调度方法,比如输入"Tuesday"会转为tuesday,等价于schedule.every().tuesday。 - 提醒函数封装:
send_reminder函数专门处理提醒输出,确保do()方法传入的是可调用对象,而非直接执行的结果。 - 异常处理:捕获
AttributeError处理星期名称错误,捕获ValueError处理时间格式错误,提升程序健壮性。 - 资源优化:将循环内的休眠时间改为60秒,避免高频循环占用过多资源。
内容的提问来源于stack exchange,提问作者Yogendran Prakash
相关产品推荐
相关产品推荐

