[ВОЛК] volk26_nri, step 4

This commit is contained in:
2025-12-21 13:30:07 +03:00
parent 6c40abbb7f
commit ae1d9eb8a7
+50 -11
View File
@@ -44,6 +44,23 @@ def log_message(message, category="VOLK_loader"):
return False return False
return False return False
def safe_log_direct(message, category="VOLK_loader"):
"""Безопасная функция для прямой записи в лог-файл без обработки исключений
Используется в критических ситуациях, когда обычный log_message может не сработать"""
try:
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}] [{category}] {message}\n"
# Прямая запись без контекстного менеджера для максимальной надежности
f = open(LOG_FILE, 'a', encoding='utf-8')
try:
f.write(log_entry)
f.flush() # Принудительно сбрасываем буфер
finally:
f.close()
except:
# Игнорируем все исключения - эта функция должна быть максимально безопасной
pass
def load_categories(): def load_categories():
"""Экспортируемая функция для загрузки категорий из JSON в базу данных""" """Экспортируемая функция для загрузки категорий из JSON в базу данных"""
inserted_count = 0 inserted_count = 0
@@ -159,23 +176,45 @@ def load_categories():
desc_response = None desc_response = None
try: try:
response = urlopen(desc_url) # Добавляем таймаут для избежания зависаний (30 секунд)
from urllib.request import Request
req = Request(desc_url)
response = urlopen(req, timeout=30)
log_message("urlopen успешно выполнен") log_message("urlopen успешно выполнен")
except (URLError, HTTPError, OSError, socket.gaierror, socket.timeout, ConnectionError) as e: except (URLError, HTTPError, OSError, socket.gaierror, socket.timeout, ConnectionError) as e:
log_message("ошибка urlopen") # Используем безопасное логирование для критических ошибок
error_msg = f"Ошибка сетевого подключения при запросе описания категории {category_id} из {desc_url}: {type(e).__name__}: {e}" safe_log_direct("ПЕРЕХВАЧЕНА СЕТЕВАЯ ОШИБКА urlopen", "ERROR")
log_message(error_msg, "ERROR") safe_log_direct(f"Категория: {category_id}, URL: {desc_url}", "ERROR")
traceback_str = traceback.format_exc() safe_log_direct(f"Тип ошибки: {type(e).__name__}, Сообщение: {str(e)}", "ERROR")
log_message(f"Трассировка сетевой ошибки для категории {category_id}:\n{traceback_str}", "ERROR") try:
traceback_str = traceback.format_exc()
safe_log_direct(f"Трассировка:\n{traceback_str}", "ERROR")
except:
pass
# Также пробуем обычное логирование
try:
error_msg = f"Ошибка сетевого подключения при запросе описания категории {category_id} из {desc_url}: {type(e).__name__}: {e}"
log_message(error_msg, "ERROR")
except:
pass
# Пропускаем эту категорию и продолжаем обработку # Пропускаем эту категорию и продолжаем обработку
continue continue
except Exception as e: except Exception as e:
# Перехватываем любые другие исключения, которые могут возникнуть при urlopen # Перехватываем любые другие исключения, которые могут возникнуть при urlopen
log_message("ошибка urlopen, шаг 2") safe_log_direct("ПЕРЕХВАЧЕНА НЕОЖИДАННАЯ ОШИБКА urlopen", "ERROR")
error_msg = f"Неожиданная ошибка при запросе описания категории {category_id} из {desc_url}: {type(e).__name__}: {e}" safe_log_direct(f"Категория: {category_id}, URL: {desc_url}", "ERROR")
log_message(error_msg, "ERROR") safe_log_direct(f"Тип ошибки: {type(e).__name__}, Сообщение: {str(e)}", "ERROR")
traceback_str = traceback.format_exc() try:
log_message(f"Трассировка неожиданной ошибки для категории {category_id}:\n{traceback_str}", "ERROR") traceback_str = traceback.format_exc()
safe_log_direct(f"Трассировка:\n{traceback_str}", "ERROR")
except:
pass
# Также пробуем обычное логирование
try:
error_msg = f"Неожиданная ошибка при запросе описания категории {category_id} из {desc_url}: {type(e).__name__}: {e}"
log_message(error_msg, "ERROR")
except:
pass
# Пропускаем эту категорию и продолжаем обработку # Пропускаем эту категорию и продолжаем обработку
continue continue