Last Updated on 2025年7月20日
概要
Pythonなどのネットワークプログラミングにおいて頻出するエラー「TimeoutError: [Errno 110] Connection timed out」は、外部との通信が一定時間内に確立できなかった場合に発生します。API連携やWebスクレイピング、FTP接続、メール送信など、通信を伴う処理において避けて通れないエラーのひとつです。
目次
エラー内容
|
1 2 3 4 |
Traceback (most recent call last): ... TimeoutError: [Errno 110] Connection timed out |
このエラーは、特定のアドレスまたはポートへの接続試行がタイムアウト(一定時間応答が得られない)となったことを意味します。多くの場合、対象サーバーがダウンしていたり、ファイアウォールでブロックされていたり、通信回線の混雑などが原因で発生します。
原因
以下は、TimeoutError: [Errno 110]が発生する主な原因です。
- 接続先サーバーの応答が遅い:APIやWebサーバーのレスポンスが遅延
- 対象ホストが存在しない:DNSの設定ミスやドメイン期限切れなど
- ファイアウォールやセキュリティ設定:企業ネットワークやクラウド側でのブロック
- ネットワーク環境の不安定さ:Wi-Fiが不安定、有線接続が断続的など
- クライアント側でのタイムアウト設定が短すぎる:接続までに必要な時間が確保されていない
対処法
以下に、具体的な対処法を紹介します。
① タイムアウト設定を延長する
|
1 2 3 4 5 6 7 |
import requests try: response = requests.get('https://example.com', timeout=10) # 秒数を調整 except requests.exceptions.Timeout: print("タイムアウトしました") |
デフォルトのタイムアウト時間が短すぎる場合、timeout引数を適切に設定して時間を延ばすことで解決できることがあります。
② 接続先の確認
pingやnslookupを使って、接続先が生きているか確認します。
|
1 2 3 |
ping example.com nslookup example.com |
エラーが続く場合は、対象のドメインやIPアドレスがダウンしている可能性があります。
③ プロキシやVPNの利用を検討
自ネットワークからの通信がブロックされている場合は、別の経路(VPNやプロキシ)を試してみるのも有効です。
④ リトライ処理を導入する
|
1 2 3 4 5 6 7 8 9 10 11 |
import time import requests for i in range(3): try: response = requests.get("https://example.com", timeout=5) break except requests.exceptions.Timeout: print(f"リトライ {i+1}/3") time.sleep(2) |
一時的な問題であれば、数秒後にリトライすることで成功する場合があります。
⑤ サーバー側の状況を確認
APIやWebサービス側のステータスページや、SNSで障害情報が発表されていないか確認しましょう。CloudflareやStatuspageを提供しているサービスも多いです。
補足
非同期通信(asyncio)を使う場合
async/awaitを使う場合にも、タイムアウト設定が必要です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import asyncio import aiohttp async def fetch(): try: async with aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=10)) as session: async with session.get('https://example.com') as response: return await response.text() except asyncio.TimeoutError: print("非同期処理でタイムアウト") asyncio.run(fetch()) |
Socket通信の場合
低レベルの通信(socketモジュール)を使用している場合も、明示的にtimeoutを設定する必要があります。
|
1 2 3 4 5 6 |
import socket s = socket.socket() s.settimeout(5) s.connect(("example.com", 80)) |
まとめ
TimeoutError: [Errno 110] Connection timed outは、通信の途中で接続が確立できない・応答がないときに発生するエラーです。原因が多岐にわたるため、クライアント側の設定確認、接続先の調査、そして再試行など、段階的な対処が重要です。
API通信や自動化スクリプトの信頼性を高めるためには、例外処理やタイムアウトの適切な制御が欠かせません。


