我的部分内容:
def testConnection(self):
# This code doesn't work
try:
self.imap.login(self.user, self.password)
return True
except:
return False
当我尝试使用错误设置将imaplib连接到邮件服务器时,脚本总是因此错误而崩溃:
Traceback (most recent call last):
File "./mail-notifier.py", line 198, in <module>
mail_check()
File "./mail-notifier.py", line 161, in mail_check
if (SettingsExist() == True and Mail().testConnection() == True):
File "./mail-notifier.py", line 142, in __init__
self.imap = imaplib.IMAP4_SSL(settings.value("MailServer"), settings.value("Port"))
File "/usr/lib64/python3.4/imaplib.py", line 1221, in __init__
IMAP4.__init__(self, host, port)
File "/usr/lib64/python3.4/imaplib.py", line 181, in __init__
self.open(host, port)
File "/usr/lib64/python3.4/imaplib.py", line 1234, in open
IMAP4.open(self, host, port)
File "/usr/lib64/python3.4/imaplib.py", line 257, in open
self.sock = self._create_socket()
File "/usr/lib64/python3.4/imaplib.py", line 1224, in _create_socket
sock = IMAP4._create_socket(self)
File "/usr/lib64/python3.4/imaplib.py", line 247, in _create_socket
return socket.create_connection((self.host, self.port))
File "/usr/lib64/python3.4/socket.py", line 512, in create_connection
raise err
File "/usr/lib64/python3.4/socket.py", line 503, in create_connection
sock.connect(sa)
socket.timeout: timed out
我无法捕获超时异常并打印错误消息并继续工作。我认为“除了:”捕获所有发生的错误。我试图设置“除socket.timeout:”,但没有成功。我错了什么?
答案 0 :(得分:1)
<强> socket.connect(address) 强>
连接到地址处的远程套接字。 (地址格式取决于地址族 - 见上文。)
如果连接被信号中断,则该方法等待直到连接完成,或者在超时时引发
socket.timeout
,如果信号处理程序没有引发异常且套接字阻塞或超时。对于非阻塞套接字,如果连接被信号(或信号处理程序引发的异常)中断,则该方法会引发InterruptedError
异常。在版本3.5中更改:该方法现在等待连接完成,而不是在连接被信号中断时引发
InterruptedError
异常,信号处理程序不会引发异常且套接字阻塞或超时(请参阅 PEP 475 了解原因)。
如果是远程连接,您应检查是否可以建立Internet连接(您和远程目标是否可访问)以及执行所需操作的连接设置是否正确。