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

如何修复Python番茄钟代码中的WNDPROC报错信息?

解决win10toast库运行时WNDPROC消息输出问题

这些WNDPROC相关消息不是程序错误,是win10toast底层依赖的win32gui模块输出的调试日志——win10toast创建通知窗口时,Windows系统会给窗口过程函数(WNDPROC)发送各类窗口消息,底层模块默认把这些消息打印到终端了。

给你三个可行的解决办法:

  • 临时屏蔽终端输出
    在代码最开头加一段重定向输出的代码,把所有终端输出导向空设备,直接屏蔽这类调试消息:

    import sys
    sys.stdout = open('nul', 'w')
    sys.stderr = open('nul', 'w')
    

    要是你需要保留自己代码里的print内容,可以改用上下文管理器临时屏蔽,只在调用show_toast的时候生效:

    import sys
    from contextlib import contextmanager
    
    @contextmanager
    def suppress_output():
        original_stdout = sys.stdout
        original_stderr = sys.stderr
        sys.stdout = open('nul', 'w')
        sys.stderr = open('nul', 'w')
        try:
            yield
        finally:
            sys.stdout.close()
            sys.stderr.close()
            sys.stdout = original_stdout
            sys.stderr = original_stderr
    
    # 调用show_toast时用这个上下文
    with suppress_output():
        toast.show_toast("标题", "内容")
    
  • 修改win10toast源码
    找到你Python环境里win10toast的安装目录(比如Lib/site-packages/win10toast),打开__init__.py,找到ToastNotifier类里的WndProc函数,把里面的print语句删掉就行——这类调试打印本来就是开发时的临时代码,删掉不影响功能。

  • 换用更干净的通知库
    直接换成plyer库,它跨平台,不会输出这类冗余调试信息,用法也简单:
    先安装:pip install plyer
    然后替换你的通知逻辑:

    from plyer import notification
    import time
    
    def tomato_timer():
        # 工作25分钟
        time.sleep(25*60)
        notification.notify(
            title="番茄钟提醒",
            message="工作时段结束,该休息5分钟了!",
            timeout=10
        )
        # 休息5分钟
        time.sleep(5*60)
        notification.notify(
            title="番茄钟提醒",
            message="休息结束,继续专注工作吧!",
            timeout=10
        )
    
    if __name__ == "__main__":
        tomato_timer()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:45:31