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

Python读取CSV转列表跳过指定行 调用Twilio发送短信异常排查

问题排查方向
  • 核心诱因是字段类型/空值问题:pandas读取CSV时默认会把空单元格识别为float类型的NaN,当你用+拼接字符串和NaN时会直接触发TypeError: can only concatenate str (not "float") to str,整个循环在第一条数据就直接中断,自然不会发出任何短信。你删掉body里的拼接变量后,body是固定纯字符串,不存在类型冲突,所以能正常触发发送逻辑。
  • 手机号匹配逻辑存在类型漏洞:你用n =='8001234567'做跳过判断,如果Numbers列被pandas识别为数值类型,这个判断永远不会生效,同时数值类型的手机号还可能出现科学计数法、末尾精度丢失的问题,传给Twilio后会直接返回号码格式错误。
  • 缺少异常捕获和日志:你当前代码没有任何错误捕获和打印逻辑,只要某条数据触发报错,整个脚本直接终止,新手很容易忽略控制台抛出的错误信息,误以为是代码无响应。
  • 号码格式不符合Twilio要求:Twilio只认带+国家码的E.164格式号码,你代码里的号码是纯数字格式,即使拼接没问题,也会因为号码格式非法被Twilio拒绝。
修正后代码
import time
import pandas as pd
from twilio.rest import Client

# 提前初始化Twilio客户端、发信号码,发信号码同样要带+国家码前缀
twilio_client = Client("你的ACCOUNT_SID", "你的AUTH_TOKEN")
my_number = "你的Twilio发信号码,例:+18001234567"

# 读CSV时强制所有列按字符串读取,空值转为空白字符串,从根源避免类型拼接错误
columns = pd.read_csv("你的CSV文件路径", dtype=str, keep_default_na=False)
# 对所有字段做去空格处理,避免CSV里自带的多余空格、换行符导致异常
phone_number = columns['Numbers'].str.strip().tolist()
last_name = columns['Name'].str.strip().tolist()
link = columns['Link'].str.strip().tolist()

def send_message(num, lname, lk):
    # 给手机号补E.164格式国家码,根据你发送的号码归属地替换前缀,国内号码用+86
    format_num = num if num.startswith("+") else f"+1{num}"
    # 用f-string做字符串拼接,比+拼接兼容性更好
    message = twilio_client.messages.create(
        body= f'Hi {lname},\n\n This is a test. Heres a link: {lk}', 
        from_= my_number, 
        to= format_num
    )
    print(f"发送成功:接收人{lname},号码{format_num},消息ID{message.sid}")

for (n, ln, lk) in zip(phone_number, last_name, link):
    # 统一转字符串去空格后再比对要跳过的号码,避免类型不匹配导致跳过逻辑失效
    if str(n).strip() == '8001234567':
        print(f"跳过指定号码:{n}")
        continue
    # 跳过缺手机号、姓名、链接的无效行
    if not all([n, ln, lk]):
        print(f"跳过无效数据行:手机号{n},姓名{ln},链接{lk}")
        continue
    time.sleep(5)
    # 加异常捕获,单条发送失败不中断整个循环,同时打印错误原因方便排查
    try:
        send_message(num=n, lname=ln, lk=lk)
    except Exception as e:
        print(f"向{n}发送失败,错误信息:{str(e)}")
注意事项
  • 禁止使用from pandas import *的通配符导入方式,容易出现变量名冲突,代码可维护性极差。
  • 调试阶段先拿1-2条测试数据验证逻辑,不要直接跑全量数据,避免触发Twilio限流或者发错消息。
  • 如果CSV里的链接带特殊字符、换行符,要提前做转义处理,否则可能触发Twilio的内容拦截规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:27:18