Ответ
TimeoutError (или аналогичные исключения, связанные с таймаутом) возникает, когда операция не завершается в заданный промежуток времени. Это критически важный механизм для предотвращения зависания программы.
Типичные сценарии:
- Сетевые операции: HTTP-запросы, чтение/запись сокетов, подключение к базе данных.
- Ожидание в параллельном программировании: Получение результата из
FutureилиPromise, ожидание на блокирующих очередях. - UI-автоматизация: Ожидание появления элемента на странице (например, в Selenium WebDriver).
- Долгие вычисления: Выполнение задачи с ограничением по времени.
Примеры на Python:
1. Таймаут HTTP-запроса (библиотека requests):
import requests
try:
# Таймаут состоит из двух частей: connect и read
response = requests.get('https://api.example.com/data', timeout=(3.05, 10))
except requests.exceptions.ConnectTimeout:
print("Ошибка: Не удалось установить соединение за 3.05 секунды.")
except requests.exceptions.ReadTimeout:
print("Ошибка: Сервер не отправил данные за 10 секунд.")
2. Таймаут при ожидании элемента в Selenium:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
driver = webdriver.Chrome()
try:
# Явное ожидание элемента не более 10 секунд
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "dynamic-element"))
)
except TimeoutException:
print("Элемент не появился за отведенное время.")
Почему это важно? Корректная обработка таймаутов делает приложение устойчивым к сбоям внешних сервисов и непредсказуемым задержкам.