我有以下代码:
def distributeMembersFile(members):
for node in members:
node = node.strip() # Strip trailing \n
if node == socket.hostname(): # No need to send the file to itself
continue
conn = None
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((node, port))
# TODO: Can possibly update the list of members here as well
s.sendall('DWLD')
s.recv(4)
except socket.error, msg:
logging.info(msg)
finally:
if s:
s.close()
现在,我的问题是,即使s.connect()在try.error块之外的try中,也不会捕获该异常。我在控制台上看到以下回溯:
s.connect((node, port))
File "<string>", line 1, in connect
error: (111, 'Connection refused')
有趣的是,在其他地方我有相同的尝试,除了socket.error块,并且这个特定的(连接被拒绝)错误被捕获为:
INFO (111, 'Connection refused')
上面是由除了block之外的logging.info函数打印的。我现在看到捕捉这个例外的唯一方法是使用'裸'除外,这不是一件好事。另外,我发现控制台上的错误没有显示为
socket.error:(111,'拒绝连接')
相反,它只是说
error: (111. 'Connection refused')
缺少前导词'socket'。可能是什么原因导致异常没有被捕获?