Python调用Twilio API发短信报缺少客户端凭证错如何解决
故障原因
直接触发Credentials are required to create a TwilioClient报错的核心原因是环境变量加载顺序错误:
代码中先执行os.getenv()读取ACCOUNT_SID、AUTH_TOKEN等配置,之后才调用load_dotenv()加载.env文件内的凭证。执行读取操作时,.env存储的配置还未注入环境变量,读取到的所有凭证值均为None,传入Twilio客户端时自然会判定为凭证缺失抛出异常。
除此之外代码还有3处会影响运行的问题:
- 存在冗余导入:重复导入了2次
os模块,还导入了完全未使用的email.message模块 - 变量引用错误:短信发送成功后返回的对象变量名为
messages,但日志打印时写的是message.sid,message是从email模块误导入的对象,不存在sid属性,就算凭证问题修复,运行到这行也会抛出属性错误 - 未做空值校验:如果.env中漏写配置项,没有提前拦截的话还是会触发同类报错
修复步骤
- 调整代码执行顺序:将
load_dotenv()的调用挪到所有os.getenv()读取操作之前,保证读取配置时.env的内容已经加载完成 - 删除冗余、错误的导入语句
- 修正日志打印时的变量名错误
- 可选增加配置空值校验,提前定位配置缺失问题
修复后的可运行代码如下:
import os import logging from dotenv import load_dotenv from twilio.rest import Client logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') # 先加载.env文件,再读取环境变量 load_dotenv() # 读取配置 ACCOUNT_SID = os.getenv("ACCOUNT_SID") AUTH_TOKEN = os.getenv("AUTH_TOKEN") PHONE = os.getenv("PHONE") RECIPIENT = os.getenv("RECIPIENT") # 配置校验(可选) required_configs = [ACCOUNT_SID, AUTH_TOKEN, PHONE, RECIPIENT] if any([not config for config in required_configs]): raise ValueError("请检查.env文件,确保ACCOUNT_SID、AUTH_TOKEN、PHONE、RECIPIENT均已正确配置") # 初始化客户端发送短信 twilioCli = Client(ACCOUNT_SID, AUTH_TOKEN) message = twilioCli.messages.create( body="The boring task is finished", from_=PHONE, to=RECIPIENT ) logging.debug(f"{message.sid}")
注意:运行前请确保
.env文件和脚本处于同一目录,文件内配置的Twilio号码、收件人号码均符合E.164格式要求(例如中国号码格式为+86xxxxxxxxxxx,美国号码为+1xxxxxxxxxx)。
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

