2010-03-28 129 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)時。