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

Python错误处理咨询:如何在错误发生时重复执行指定代码段(含try语句失效情况)

如何在程序出错时重复执行指定代码(邮箱登录场景)

嘿,我看你想用错误处理让程序在登录出错时自动重试,但之前的try语句没起作用还导致崩溃对吧?咱们来一步步搞定这个问题:

首先先纠正你代码里的一个小疏漏:你导入的是smtpd,但实际用到的SMTP库是smtplib,这个小错误得先改过来,不然程序一开始就会报错。

接下来,之前的try语句没达到预期效果,大概率是两个原因:一是没有捕获对应类型的异常,二是没有循环重试的逻辑——出错后程序直接走到了异常分支但没有回到登录步骤。

下面是调整后的完整代码,我会逐段解释:

import smtplib

def login_to_email():
    # 获取用户输入
    login_email = input("请输入你的邮箱:\n")
    login_pwd = input("请输入你的邮箱密码:\n")
    
    try:
        # 建立SMTP连接并尝试登录
        server = smtplib.SMTP_SSL("smtp.gmail.com", 465)
        server.login(login_email, login_pwd)
        print("登录成功!")
        return server
    except smtplib.SMTPAuthenticationError:
        # 专门捕获登录验证失败的情况(比如邮箱密码错)
        print("邮箱地址或密码错误,请重新输入!")
        return None
    except smtplib.SMTPException as e:
        # 捕获其他SMTP相关错误(比如连接失败、服务器拒绝等)
        print(f"SMTP服务出错:{str(e)},请重试!")
        return None
    except Exception as e:
        # 兜底捕获其他未知错误
        print(f"发生未知错误:{str(e)},请重试!")
        return None

# 循环尝试登录,直到成功
email_server = None
while email_server is None:
    email_server = login_to_email()

# 登录成功后可以在这里添加发邮件等后续操作
# email_server.sendmail(...)
# email_server.quit()

关键细节说明:

  • 封装登录逻辑为函数:把登录相关的代码放进函数里,方便重复调用,代码结构更清晰。
  • 精准捕获异常:
    • 优先捕获smtplib.SMTPAuthenticationError——这是Gmail登录验证失败时会抛出的专属异常,能精准提示用户是账号密码问题。
    • 然后用smtplib.SMTPException处理所有其他SMTP服务相关的错误(比如连接超时、服务器不可达等)。
    • 最后用Exception兜底,避免遗漏其他未知错误导致程序崩溃。
  • 循环重试机制:用while循环不断调用登录函数,直到函数返回有效的server对象(也就是登录成功),这样出错后程序会自动回到输入登录信息的步骤。

额外建议:

如果不想无限循环重试,可以设置最大尝试次数,避免程序死循环:

max_attempts = 3
current_attempt = 0
email_server = None

while email_server is None and current_attempt < max_attempts:
    current_attempt += 1
    print(f"第 {current_attempt} 次尝试登录...")
    email_server = login_to_email()

if email_server is None:
    print(f"已尝试 {max_attempts} 次,登录失败,程序将退出")

另外提醒一下:如果是Gmail账号,现在开启两步验证的情况下,必须使用应用专用密码才能通过SMTP登录,普通的账号密码会验证失败,这个是很多人踩坑的点哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:17:31