Compare commits
2
Commits
6c40abbb7f
...
c2fd69cf39
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c2fd69cf39 | ||
|
|
ae1d9eb8a7 |
+48
-7
@@ -44,6 +44,23 @@ def log_message(message, category="VOLK_loader"):
|
||||
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():
|
||||
"""Экспортируемая функция для загрузки категорий из JSON в базу данных"""
|
||||
inserted_count = 0
|
||||
@@ -159,23 +176,47 @@ def load_categories():
|
||||
|
||||
desc_response = None
|
||||
try:
|
||||
response = urlopen(desc_url)
|
||||
# Добавляем таймаут для избежания зависаний (30 секунд)
|
||||
from urllib.request import Request
|
||||
req = Request(desc_url)
|
||||
safe_log_direct("run urlopen", "DEBUG")
|
||||
response = urlopen(req, timeout=30)
|
||||
safe_log_direct("done urlopen", "ERROR")
|
||||
log_message("urlopen успешно выполнен")
|
||||
except (URLError, HTTPError, OSError, socket.gaierror, socket.timeout, ConnectionError) as e:
|
||||
log_message("ошибка urlopen")
|
||||
# Используем безопасное логирование для критических ошибок
|
||||
safe_log_direct("ПЕРЕХВАЧЕНА СЕТЕВАЯ ОШИБКА urlopen", "ERROR")
|
||||
safe_log_direct(f"Категория: {category_id}, URL: {desc_url}", "ERROR")
|
||||
safe_log_direct(f"Тип ошибки: {type(e).__name__}, Сообщение: {str(e)}", "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")
|
||||
traceback_str = traceback.format_exc()
|
||||
log_message(f"Трассировка сетевой ошибки для категории {category_id}:\n{traceback_str}", "ERROR")
|
||||
except:
|
||||
pass
|
||||
# Пропускаем эту категорию и продолжаем обработку
|
||||
continue
|
||||
except Exception as e:
|
||||
# Перехватываем любые другие исключения, которые могут возникнуть при urlopen
|
||||
log_message("ошибка urlopen, шаг 2")
|
||||
safe_log_direct("ПЕРЕХВАЧЕНА НЕОЖИДАННАЯ ОШИБКА urlopen", "ERROR")
|
||||
safe_log_direct(f"Категория: {category_id}, URL: {desc_url}", "ERROR")
|
||||
safe_log_direct(f"Тип ошибки: {type(e).__name__}, Сообщение: {str(e)}", "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")
|
||||
traceback_str = traceback.format_exc()
|
||||
log_message(f"Трассировка неожиданной ошибки для категории {category_id}:\n{traceback_str}", "ERROR")
|
||||
except:
|
||||
pass
|
||||
# Пропускаем эту категорию и продолжаем обработку
|
||||
continue
|
||||
|
||||
|
||||
Reference in New Issue
Block a user