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

Python自动网课脚本报错:TypeError: 'bool' object is not callable 求助

问题排查与修复方案

首先解决你遇到的直接错误:

1. 语法错误导致的TypeError

你写的while True (now != lesson1 and now != lesson2 and now != lesson3):是错误的语法。在Python中,while后面直接跟判断条件即可,不需要额外加True再把条件括起来——这种写法会被解释器误认为你想调用True这个布尔对象(把它当作函数),所以抛出了'bool' object is not callable的错误。

把这行改成下面两种写法都可以:

# 写法1:直接写条件
while now != lesson1 and now != lesson2 and now != lesson3:
# 写法2:用括号包裹条件(可选,仅用于提升可读性)
while (now != lesson1 and now != lesson2 and now != lesson3):

2. 其他潜在问题修复

除了这个语法错误,你的代码还有几个会导致后续运行异常的问题:

  • time.sleep()缺少参数:这个方法必须传入一个数值(表示等待的秒数),比如time.sleep(1),否则会报错。
  • 结束时间判断逻辑错误:你的now变量格式是"%D, %H:%M"(包含日期),但你却和单纯的时间字符串"12:00"比较,永远不会匹配。需要单独提取时间部分来判断。
  • 重复代码冗余:三个课程的判断逻辑几乎一样,可以用字典来统一管理课程时间和链接,简化代码。

优化后的完整代码

import webbrowser
import time

# 用字典存储课程时间和对应的链接,方便维护
lessons = {
    "03/09/21, 14:10": "https://google.com",
    "03/10/21, 14:11": "https://google.com",
    "03/10/21, 14:12": "https://google.com"
}

while True:
    now = time.strftime("%D, %H:%M")
    # 检查当前时间是否在课程列表中
    if now in lessons:
        print("LESSON IS OPENING :D")
        webbrowser.open(lessons[now])
        # 这里假设你想等待课程结束,示例:等待到当天15:10
        end_time = time.strftime("%D, ") + "15:10"
        while time.strftime("%D, %H:%M") != end_time:
            time.sleep(60)  # 每分钟检查一次,减少资源消耗
        break  # 打开课程并等待结束后退出循环
    print(f"Waiting, the current time is {now}")
    time.sleep(60)  # 每分钟检查一次,比每秒检查更高效

代码说明

  • 用字典lessons统一管理课程时间和链接,后续新增/修改课程只需要修改字典即可,不用重复写if判断。
  • 把now的更新放到循环内部,确保每次循环都能获取最新时间。
  • 调整了sleep的间隔为60秒,减少不必要的循环次数,更节省资源。
  • 修复了结束时间的判断逻辑,现在会匹配包含日期的完整时间字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:17:43