From 58a8f1909fc5c6adaf9a45e16dbe83814796e7d1 Mon Sep 17 00:00:00 2001 From: gitadmin Date: Sun, 21 Dec 2025 13:13:49 +0300 Subject: [PATCH] =?UTF-8?q?[=D0=92=D0=9E=D0=9B=D0=9A]=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=8F=D0=B5=D0=BC=20urlopen=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BE=D1=82=D0=BB=D0=BE=D0=B2=D0=B0=20=D0=B1=D0=B0?= =?UTF-8?q?=D0=B3=D0=B0=20=D1=81=20volk26=5Fnri?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- volk_load.py | 67 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/volk_load.py b/volk_load.py index ff0486c..e77090e 100644 --- a/volk_load.py +++ b/volk_load.py @@ -4,6 +4,7 @@ import time import traceback from datetime import datetime from urllib.request import urlopen +from urllib.error import URLError, HTTPError from dotenv import load_dotenv import mysql.connector from mysql.connector import Error @@ -155,26 +156,52 @@ def load_categories(): log_message(f"Запрос описания для категории {category_id} из {desc_url}") log_message("отладочное сообщение для проверки вывода в лог-файл") - with urlopen(desc_url) as response: - # Явно указываем кодировку UTF-8 при декодировании - raw_data = response.read() - log_message("raw data read") - try: - decoded_data = raw_data.decode('utf-8') - log_message("data decoded") - except UnicodeDecodeError as e: - error_msg = f"Ошибка декодирования ответа для категории {category_id}: {e}. Попытка декодирования как latin-1." - log_message(error_msg, "WARNING") - decoded_data = raw_data.decode('latin-1') - - try: - desc_response = json.loads(decoded_data) - log_message("json loaded") - except json.JSONDecodeError as e: - error_msg = f"Ошибка парсинга JSON для категории {category_id}: {e}. Первые 500 символов ответа: {decoded_data[:500]}" - log_message(error_msg, "ERROR") - # Пропускаем эту категорию и продолжаем обработку - continue + desc_response = None + try: + response = urlopen(desc_url) + log_message("urlopen успешно выполнен") + except (URLError, HTTPError, OSError) as e: + error_msg = f"Ошибка сетевого подключения при запросе описания категории {category_id} из {desc_url}: {type(e).__name__}: {e}" + log_message(error_msg, "ERROR") + traceback_str = traceback.format_exc() + log_message(f"Трассировка сетевой ошибки для категории {category_id}:\n{traceback_str}", "ERROR") + # Пропускаем эту категорию и продолжаем обработку + continue + + try: + with response: + # Явно указываем кодировку UTF-8 при декодировании + raw_data = response.read() + log_message("raw data read") + try: + decoded_data = raw_data.decode('utf-8') + log_message("data decoded") + except UnicodeDecodeError as e: + error_msg = f"Ошибка декодирования ответа для категории {category_id}: {e}. Попытка декодирования как latin-1." + log_message(error_msg, "WARNING") + decoded_data = raw_data.decode('latin-1') + + try: + desc_response = json.loads(decoded_data) + log_message("json loaded") + except json.JSONDecodeError as e: + error_msg = f"Ошибка парсинга JSON для категории {category_id}: {e}. Первые 500 символов ответа: {decoded_data[:500]}" + log_message(error_msg, "ERROR") + # Пропускаем эту категорию и продолжаем обработку + continue + except Exception as e: + error_msg = f"Ошибка при чтении ответа для категории {category_id}: {type(e).__name__}: {e}" + log_message(error_msg, "ERROR") + traceback_str = traceback.format_exc() + log_message(f"Трассировка ошибки чтения для категории {category_id}:\n{traceback_str}", "ERROR") + # Пропускаем эту категорию и продолжаем обработку + continue + + # Проверяем, что desc_response был успешно получен + if desc_response is None: + error_msg = f"Не удалось получить ответ для категории {category_id}" + log_message(error_msg, "ERROR") + continue # Проверка версии API api_version = desc_response.get('api_version')