2010-03-28 47 views
0

错误被抛出是:如何捕捉Python的SMTPlib中的连接超时错误?

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 

谢谢。

+0

你可以发布引发错误的代码吗? – 2010-03-28 03:23:59

+0

我用引发错误的代码更新了问题。它会在无法联系到smtp服务器时抛出错误。 – ensnare 2010-03-28 03:38:52

回答

2

我相信socket.error应该可以工作,但是如果您发布了您使用的代码,我们可以帮助您更好。 smtplib.SMTPConnectError也应该是有趣的。

尝试这样:

try: 
    server = smtplib.SMTP("something.com") 
except (socket.error, smtplib.SMTPConnectError): 
    print >> stderr, "Error connecting" 
    sys.exit(-1) 
3

您需要提供的异常类,而不是它们的实例。也就是说,代码看起来应该像

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 socket,socket.error访问。

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