TimeoutError
Python Programming Language
Severity: ModerateWhat Does This Error Mean?
A TimeoutError means an operation started but did not finish within the allowed time limit. The most common cause is a network request where the server took too long to respond. Python (or the library you are using) has a timeout setting — if the response does not arrive in time, it gives up and raises a TimeoutError.
Affected Models
- Python 3.3+
- All Python versions when using networking libraries
Common Causes
- The server is slow or overloaded and cannot respond within the timeout window
- A poor or unstable network connection is causing packets to be lost or delayed
- The timeout value in your code is set too low for the actual response time of the server
- A firewall or proxy is silently dropping the connection instead of refusing it
- The operation (like a database query or file operation) is taking longer than expected
How to Fix It
-
Test the URL or server in your browser to see how long it actually takes to respond. If the browser also times out, the server is the problem — not your code.
If the server responds fine in the browser, your code's timeout limit may simply be too short.
-
Increase the timeout value in your code. When using the requests library, add a timeout parameter: requests.get(url, timeout=30). This gives the server 30 seconds to respond.
The default timeout for many libraries is very short (5-10 seconds). Increase it for slow APIs or large downloads.
-
Add retry logic. Some timeouts are temporary — the server was just briefly overloaded. Retrying after a short wait often succeeds.
Use the Retry class from urllib3 or a simple loop with time.sleep() between attempts.
-
Check if the operation has separate connect and read timeouts. The requests library lets you set both: requests.get(url, timeout=(5, 30)) — 5 seconds to connect, 30 seconds to read.
A short connect timeout is fine. A longer read timeout is needed for slow responses.
-
If you are calling a database, check if the query is slow. A database query that takes 30+ seconds usually means a missing index or an inefficient query, not a timeout setting problem.
Run the query directly in your database tool to measure how long it takes.
When to Call a Professional
TimeoutErrors are usually fixable yourself. First check if the server is actually slow by testing it in a browser. Then adjust your timeout setting to give the server more time, and add retry logic for when timeouts do occur.
Frequently Asked Questions
What is a good timeout value to use?
It depends on what you are connecting to. For fast public APIs, 10-30 seconds is usually enough. For large file downloads or slow database queries, you may need minutes. A good practice is to always set some timeout — never leave it at None (unlimited), because a hung connection will freeze your program forever.
What is the difference between TimeoutError and socket.timeout?
In Python 3.3+, socket.timeout was made an alias for TimeoutError, so they are now the same thing. In older code you might see 'except socket.timeout' — this is equivalent to 'except TimeoutError'. Both refer to the same type of error.
How many times should I retry on a timeout?
A common pattern is to retry 3 times with exponential backoff — wait 1 second, then 2, then 4 seconds between attempts. This gives the server time to recover without hammering it with rapid requests. After 3 failed attempts, give up and log the error or alert the user.