如何捕捉Python的SMTPlib中的连接超时错误?
问题描述:
错误被抛出是:如何捕捉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
谢谢。
答
我相信socket.error
应该可以工作,但是如果您发布了您使用的代码,我们可以帮助您更好。 smtplib.SMTPConnectError
也应该是有趣的。
尝试这样:
try:
server = smtplib.SMTP("something.com")
except (socket.error, smtplib.SMTPConnectError):
print >> stderr, "Error connecting"
sys.exit(-1)
答
您需要提供的异常类,而不是它们的实例。也就是说,代码看起来应该像
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
)时。
你可以发布引发错误的代码吗? – 2010-03-28 03:23:59
我用引发错误的代码更新了问题。它会在无法联系到smtp服务器时抛出错误。 – ensnare 2010-03-28 03:38:52