Ошибки и исключения¶
В этом разделе описаны все исключения, которые могут возникнуть при использовании библиотеки FUCKTAR.
Базовые исключения¶
GeneratorError¶
Базовый класс для всех исключений библиотеки.
Все другие исключения библиотеки наследуются от этого класса.
Исключения генерации¶
PatternGenerationError¶
Ошибка в регулярном выражении паттерна.
Возникает, когда регулярное выражение в паттерне некорректно.
Причины: - Некорректный синтаксис регулярного выражения - Использование неподдерживаемых конструкций
Решение: - Проверьте синтаксис регулярного выражения - Убедитесь, что регулярное выражение может генерировать строки
PatternValueError¶
Ошибка в диапазоне значений для генерации.
class PatternValueError(GeneratorError):
"""Диапазон для генерации выбран неверно, исправьте регулярное выражение"""
Возникает, когда регулярное выражение задает слишком узкий диапазон для генерации.
Причины: - Слишком ограниченный диапазон символов - Регулярное выражение, которое не может сгенерировать допустимые строки
Решение: - Расширьте диапазон символов в регулярном выражении - Упростите регулярное выражение
TimeoutGenerationError¶
Превышено время генерации.
Возникает, когда процесс генерации превышает заданный таймаут.
Причины: - Сложные регулярные выражения - Большое количество объектов для генерации - Малый таймаут для сложной генерации - Высокие требования к уникальности
Решение:
- Увеличьте значение таймаута
- Упростите паттерны
- Уменьшите количество запрашиваемых объектов
- Используйте ignore_count=True для генерации того, что удалось создать
UniqueGenerationError¶
Не удалось сгенерировать уникальные объекты.
Возникает, когда не удается сгенерировать нужное количество уникальных объектов.
Причины:
- Слишком ограниченные паттерны для уникальных полей
- Большое количество запрашиваемых уникальных объектов
- Малое значение max_attempts
Решение:
- Расширьте паттерны для уникальных полей
- Увеличьте значение max_attempts
- Используйте ignore_count=True для генерации того, что удалось создать
PatternConfigError¶
Ошибка в конфигурации паттерна.
Возникает, когда паттерн не имеет корректной конфигурации.
Причины:
- Отсутствует атрибут pattern_config
- Некорректные значения в PatternConfig
- Отсутствует scope в конфигурации
- Отсутствуют unique_fields при необходимости уникальности
Решение:
- Добавьте атрибут pattern_config к паттерну
- Убедитесь, что scope задан и не пуст
- Убедитесь, что unique_fields заданы корректно
Исключения хранилища¶
StorageError¶
Ошибка при работе с хранилищем.
Возникает при ошибках работы с файловой системой или блокировками.
Причины: - Нет доступа к файловой системе - Файлы заблокированы другими процессами - Недостаточно места на диске - Ошибки файловой системы
Решение:
- Проверьте права доступа к директории .generator_scopes
- Убедитесь, что другие процессы не блокируют файлы
- Освободите место на диске
- Проверьте целостность файловой системы
Примеры обработки ошибок¶
Базовая обработка¶
from fucktar.exceptions import (
UniqueGenerationError,
TimeoutGenerationError,
PatternConfigError,
PatternGenerationError,
PatternValueError,
StorageError
)
try:
users = UserPatterns().configure(unique=True).generate(count=1000000, timeout=5)
except TimeoutGenerationError as e:
print(f"Превышено время генерации: {e}")
except UniqueGenerationError as e:
print(f"Не удалось сгенерировать уникальные данные: {e}")
except PatternConfigError as e:
print(f"Ошибка в конфигурации паттерна: {e}")
except PatternGenerationError as e:
print(f"Ошибка в регулярном выражении: {e}")
except PatternValueError as e:
print(f"Ошибка в диапазоне значений: {e}")
except StorageError as e:
print(f"Ошибка хранилища: {e}")
except Exception as e:
print(f"Неизвестная ошибка: {e}")
Обработка в многопоточной среде¶
import concurrent.futures
from fucktar.exceptions import TimeoutGenerationError
def generate_users_safely(count):
try:
return UserPatterns().configure(unique=True).generate(count=count, timeout=30)
except TimeoutGenerationError as e:
print(f"Таймаут при генерации {count} пользователей: {e}")
return []
except Exception as e:
print(f"Ошибка при генерации пользователей: {e}")
return []
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
futures = [executor.submit(generate_users_safely, 100) for _ in range(4)]
results = [future.result() for future in futures]
Рекомендации по обработке ошибок¶
- Всегда обрабатывайте исключения, особенно при генерации большого количества данных
- Используйте разные подходы к обработке разных типов ошибок
- Логгируйте ошибки для последующего анализа
- Предоставляйте понятные сообщения об ошибках пользователям
- Используйте значения по умолчанию для параметров таймаута и попыток
- Тестируйте обработку ошибок в ваших приложениях
- При использовании уникальности всегда предусматривайте обработку
UniqueGenerationError - При работе с файлами всегда предусматривайте обработку
StorageError