2

抛出的错误是:

error: [Errno 110] Connection timed out

我不知道除了什么?

    try:
        smtpObj = smtplib.SMTP('smtp.example.com')
        smtpObj.starttls()
        smtpObj.login('user','pass')
        smtpObj.sendmail(sender, receivers, message)
        print "Successfully sent email"
    except smtplib.SMTPException('Error: unable to send email"'):
        pass
    except smtplib.socket.error ('Error: could not connect to server'):
        pass

谢谢。

4

3 回答 3

4

您需要提供异常类,而不是其实例。也就是说,代码应该是这样的

try:
    smtpObj = smtplib.SMTP('smtp.example.com')
    smtpObj.starttls()
    smtpObj.login('user','pass')
    smtpObj.sendmail(sender, receivers, message)
    print "Successfully sent email"
except smtplib.SMTPException: # Didn't make an instance.
    pass
except smtplib.socket.error:
    pass

第二个异常,smtplib.socket.error似乎是捕获该错误的适用异常。它通常直接从套接字模块访问import socketsocket.error.

请注意,我说那是代码“应该”的样子,这有点夸张。使用try/except时,您希望在块中包含尽可能少的代码try,尤其是当您捕获相当普遍的错误时,例如socket.error.

于 2010-03-28T03:43:55.713 回答
2

我相信socket.error应该可以,但是如果您发布您正在使用的代码,我们可以为您提供更好的帮助。smtplib.SMTPConnectError也应该感兴趣。

尝试这样的事情:

try:
    server = smtplib.SMTP("something.com")
except (socket.error, smtplib.SMTPConnectError):
    print >> stderr, "Error connecting"
    sys.exit(-1)
于 2010-03-28T03:28:17.383 回答
0

OSErrorsmtplib.SMTPConnectErrorsocket.timeoutTimeoutError等的基类。因此,OSError如果你想处理它们,你应该捕获它们:

try:
    ...
except OSError:
    ...

见:https ://bugs.python.org/issue20903

于 2020-02-10T20:22:34.130 回答