Python实现每小时喝水提醒触发TypeError,求排查及替代模块推荐
错误排查与解决方案
核心错误原因
你的代码触发TypeError主要有两个问题:
- schedule调度传参错误:
schedule.every().hour.do(remember_water())里的remember_water()是直接调用函数,会返回None,但do()方法需要传入函数对象(即不带括号的remember_water)。加括号会让函数立即执行一次,而非交给schedule定时调度,这就导致do方法收到了非可调用的None,触发TypeError。 - 缺失time模块导入:代码中使用了
time.sleep(1),但没有导入time模块,后续运行还会触发NameError,需要补充导入。
修正后的代码
from notifypy import Notify import schedule import time # 补充time模块导入 def remember_water(): notification = Notify() notification.title = "喝水提醒" notification.message = "该起身喝水啦,别让身体缺水!" notification.send() # 传入函数对象,而非调用结果 schedule.every().hour.do(remember_water) while True: schedule.run_pending() time.sleep(1)
替代模块推荐
如果觉得notifypy或schedule不够顺手,可以试试这些更易用的工具:
- plyer:跨平台桌面工具库,除了通知还支持其他桌面交互,兼容性强,无需额外系统依赖。
- win10toast(仅Windows):专为Windows 10/11设计的轻量通知模块,API极简,配置门槛低。
- desktop-notifier:跨平台通知库,支持自定义图标、通知优先级,适合简单定时通知场景。
- APScheduler:比schedule功能更丰富的定时任务框架,支持多种调度方式(间隔、cron表达式等),适合复杂定时需求。
内容的提问来源于stack exchange,提问作者Raphi Schilli
相关产品推荐
相关产品推荐

