个人名片
作者简介:java领域优质创作者
个人主页:码农阿豪
工作室:新空间代码工作室(提供各种软件服务)
个人邮箱:[[email protected]]
个人微信:15279484656
个人导航网站:www.forff.top
座右铭:总有人要赢。为什么不能是我呢?
码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用
Redis专栏:Redis从零到一学习分享,经验总结,案例实战
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有
在Python开发过程中,开发者经常会遇到各种错误和异常。有些错误显而易见,例如语法错误;而有些则较为隐蔽,例如网络连接问题或第三方API的限制。本文将总结两个典型的Python开发问题:SMTP服务器连接失败和f-string字符串处理错误,分析其原因,并提供详细的解决方案。文章还将包含代码示例和最佳实践建议,帮助开发者避免类似问题。
在尝试使用Python的smtplib
连接QQ邮箱SMTP服务器时,出现以下错误:
2025-05-15 23:34:58,808 - app - ERROR - SMTP服务器连接失败: (-1, b'\x00\x00\x00')
Traceback (most recent call last):
File "/doudian-phone-tool/doudian/send_qq_email.py", line 70, in send_email_with_attachment
with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
File "/usr/local/lib/python3.11/smtplib.py", line 284, in __exit__
raise SMTPResponseException(code, message)
smtplib.SMTPResponseException: (-1, b'\x00\x00\x00')
smtp.qq.com
拼写错误)确保代码中的SMTP配置正确:
smtp_server = "smtp.qq.com" # 必须正确
smtp_port = 465 # SSL端口,或587(STARTTLS)
sender_email = "[email protected]"
password = "your_authorization_code" # 不是QQ邮箱密码!
优化代码,增加更详细的错误日志和重试机制:
import smtplib
import time
from socket import gaierror
def send_email_with_retry(sender, password, recipients, msg, max_retries=3):
for attempt in range(max_retries):
try:
with smtplib.SMTP_SSL("smtp.qq.com", 465) as server:
server.login(sender, password)
server.sendmail(sender, recipients, msg.as_string())
return True
except smtplib.SMTPAuthenticationError:
print("SMTP认证失败:请检查邮箱和授权码")
return False
except (smtplib.SMTPException, gaierror) as e:
print(f"SMTP连接失败(尝试 {attempt + 1}/{max_retries}):{str(e)}")
time.sleep(2) # 延迟2秒后重试
return False
在Python代码中使用f-string时,由于引号嵌套错误导致语法错误:
current_app.logger.info(f"【{item['waybillNum']}】运单号,【{record["手机号"]}】手机号处理成功,保存订单到数据库")
^^^^^^^^^
SyntaxError: f-string: unmatched '['
"..."
,而内部字典键也使用了双引号 record["手机号"]
,导致Python解析器无法正确识别字符串边界。SyntaxError
。current_app.logger.info(f'【{item["waybillNum"]}】运单号,【{record["手机号"]}】手机号处理成功,保存订单到数据库')
current_app.logger.info(f'【{item[\'waybillNum\']}】运单号,【{record[\'手机号\']}】手机号处理成功,保存订单到数据库')
current_app.logger.info(f"【{item['waybillNum']}】运单号,【{record['手机号']}】手机号处理成功,保存订单到数据库")
black
或autopep8
)自动调整代码风格。问题类型 | 预防措施 |
---|---|
SMTP连接失败 | 1. 检查SMTP服务是否开启 2. 使用正确的授权码 3. 增加错误重试机制 |
f-string引号错误 | 1. 统一引号风格 2. 使用代码格式化工具 3. 避免多层嵌套 |
logging
模块记录详细错误信息。telnet smtp.qq.com 465
),再调试代码。pylint
或flake8
检查语法问题。Python开发中的许多错误都可以通过仔细检查配置、遵循最佳实践和增强错误处理来避免。本文详细分析了SMTP连接失败和f-string引号错误的解决方案,希望能帮助开发者更高效地调试代码。如果你有类似问题,欢迎在评论区讨论!