You need to enable JavaScript to run this app. Python基于Twilio实现定时短信时datetime判断逻辑失效问题
优惠活动
大模型
产品
解决方案
定价
更多

Python基于Twilio实现定时短信时datetime判断逻辑失效问题

踩坑点逐条梳理
  • 最根本的逻辑错误:拿对象和字符串比相等
    if判断里datetime.time(datetime.now())取出来的是datetime库的time类实例,代码直接把它和字符串格式的'08:00:00.000000'做等值比较。Python中不同类型的对象做==判断永远返回False,哪怕时间值完全对上,也不可能匹配成功,这就是if分支从来没触发的核心原因。
  • 低级语法错误:if块的代码没缩进
    原代码里if判断结束后,下面的client.messages.create那行根本没缩进,按照Python的语法规则,这行代码不属于if的执行逻辑,甚至程序一跑就会报IndentationError直接崩,根本到不了运行判断的步骤。
  • 循环设计缺陷:裸跑死循环既占CPU又抓不到触发点
    原代码的while True没有加任何休眠间隔,一来会把CPU占满,二来循环跑的太快,等真到8点整的那一瞬间,很可能因为循环的时序问题直接跳过去,根本抓不到那个能匹配的节点。
  • 测试逻辑不对:改了测试时间也白搭
    之前你把触发条件改成“当前时间过一分钟就发”做测试的时候,没有提前把目标触发时间固定下来,每次循环都动态取当前的实时时间,等一分钟过去,当前时间早就变了,根本找不到匹配的判断点,自然不会触发发送。
能正常跑的修正代码
from twilio.rest import Client
from datetime import datetime
import time

# 替换成自己的Twilio账号凭证
client = Client("你的Account SID", "你的Auth Token")
# 标记上次成功发送的日期,防止同一天重复触发
last_send_date = None

while True:
    now = datetime.now()
    # 拆成时、分、秒分别判断,不用转字符串绕弯
    if now.hour == 8 and now.minute == 0 and now.second == 0:
        # 当天没发过才执行发送,避免轮询间隔触发多次重复发送
        if now.date() != last_send_date:
            client.messages.create(
                to="+你的接收手机号",
                from_="+你的Twilio专属发送号",
                body="Goodmorning"
            )
            last_send_date = now.date()
    # 每10秒轮询一次,不占CPU,也不会错过触发时刻
    time.sleep(10)
实用优化建议
  • 别总想着把时间对象转成字符串再做等值匹配,直接拆分datetime的时、分、秒属性判断,既简单又不容易出类型错误。
  • 长期挂着Python进程容易遇到意外中断,如果想更稳定,直接用系统自带的定时任务(Linux的cron、Windows任务计划)跑发送脚本就行,不用一直跑死循环占资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 18:24:07