From 2503203f6d0ef4a3f0ea9aafe862366a3c4da5ca Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 17 Aug 2026 14:08:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20SMSEngine=20=E7=BC=BA=E7=99=BE=E5=BA=A6?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E4=B8=8D?= =?UTF-8?q?=E6=8A=9B=E5=BC=82=E5=B8=B8(=E5=BB=B6=E8=BF=9F=E6=A3=80?= =?UTF-8?q?=E6=9F=A5)=EF=BC=8C=E9=81=BF=E5=85=8D=20load=5Fsmssend=20?= =?UTF-8?q?=E4=B8=AD=E6=96=AD=E8=87=B4=20sms=5Fengine=20=E6=9C=AA=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=20NameError?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smssend/smssend.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/smssend/smssend.py b/smssend/smssend.py index 6c0c5e5..ba8816d 100644 --- a/smssend/smssend.py +++ b/smssend/smssend.py @@ -78,18 +78,19 @@ class SMSEngine: self.access_key_secret = os.getenv('BAIDU_SMS_ACCESS_KEY_SECRET') self.host = os.getenv('BAIDU_SMS_HOST') self.signature_id = os.getenv('BAIDU_SMS_SIGNATURE_ID') - - # 检查必需的环境变量是否都已设置,若缺失则抛出异常 - required_vars = [self.access_key, self.access_key_secret, self.host, self.signature_id] - if not all(required_vars): - missing = [name for name, val in zip( - ['BAIDU_SMS_ACCESS_KEY', 'BAIDU_SMS_ACCESS_KEY_SECRET', 'BAIDU_SMS_HOST', 'BAIDU_SMS_SIGNATURE_ID'], - required_vars) if val is None] - raise EnvironmentError(f"Missing required environment variables: {', '.join(missing)}") - - self.sms_client = self.create_client() + self.sms_client = None self.sms_types = {} + # 缺环境变量不抛异常(否则 load_smssend 中断 → sms_engine 未注册 → dspy 里 NameError)。 + # 延迟到真正发送时检查,返回明确错误。 + missing = [name for name, val in zip( + ['BAIDU_SMS_ACCESS_KEY', 'BAIDU_SMS_ACCESS_KEY_SECRET', 'BAIDU_SMS_HOST', 'BAIDU_SMS_SIGNATURE_ID'], + [self.access_key, self.access_key_secret, self.host, self.signature_id]) if not val] + if missing: + error(f'百度短信未配置,缺少环境变量: {", ".join(missing)}(发送短信时会返回错误)') + return + self.sms_client = self.create_client() + def create_client(self): baiDuSmsConfig = BceClientConfiguration( credentials=BceCredentials(self.access_key, self.access_key_secret), @@ -98,6 +99,8 @@ class SMSEngine: return sms.SmsClient(baiDuSmsConfig) async def send(self, stype, template_id, phone, params) -> dict: + if self.sms_client is None: + return {'status': False, 'msg': '百度短信未配置,请设置 BAIDU_SMS_ACCESS_KEY 等环境变量'} try: f = partial(self.sms_client.send_message, signature_id=self.signature_id, template_id=template_id,