Есть несколько способов сделать это, но TimeoutError
, вероятно, попало в ваш except
.Вы не видите этого, потому что str (e) - пустая строка.
Вы можете видеть стеки , включающие режим отладки asyncio.
Сначала вы можете пойматьисключение, как вы это сделали:
async def fail_fun():
try:
imap_client = aioimaplib.IMAP4_SSL(host='foo', timeout=1)
await imap_client.wait_hello_from_server()
except Exception as e:
print('Exception : ' + str(e))
if __name__ == '__main__':
get_event_loop().run_until_complete(fail_fun())
Во-вторых, вы можете перехватить исключение в run_until_complete
async def fail_fun():
imap_client = aioimaplib.IMAP4_SSL(host='foo', timeout=1)
await imap_client.wait_hello_from_server()
if __name__ == '__main__':
try:
get_event_loop().run_until_complete(fail_fun())
except Exception as e:
print('Exception : ' + str(e))
Соединение установлено, оборачивая сопрограмму loop.create_connection
с create_task
:мы хотели установить соединение в конструкторе IMAP4, и __init__
должен вернуть None .
Так что, если у вашего хоста неверное значение, вы можете проверить его раньше или дождаться тайм-аута:
socket.gaierror: [Errno -5] No address associated with hostname
, если хост не отвечает до истечения времени ожидания, вы можете увеличитьтайм-аут.И если соединение потеряно во время соединения, вы можете добавить функцию обратного вызова потерянного соединения в конструкторе IMAP4.