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

如何使用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)")

代码说明

  1. 动态调度器获取:getattr(schedule.every(), target_day.lower())实现了根据用户输入的星期动态调用对应的调度方法,比如输入"Tuesday"会转为tuesday,等价于schedule.every().tuesday。
  2. 提醒函数封装:send_reminder函数专门处理提醒输出,确保do()方法传入的是可调用对象,而非直接执行的结果。
  3. 异常处理:捕获AttributeError处理星期名称错误,捕获ValueError处理时间格式错误,提升程序健壮性。
  4. 资源优化:将循环内的休眠时间改为60秒,避免高频循环占用过多资源。

内容的提问来源于stack exchange,提问作者Yogendran Prakash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:10:26