Перейти к содержанию

Ошибки и исключения

В этом разделе описаны все исключения, которые могут возникнуть при использовании библиотеки FUCKTAR.

Базовые исключения

GeneratorError

Базовый класс для всех исключений библиотеки.

class GeneratorError(Exception):
    """Базовая ошибка генератора"""

Все другие исключения библиотеки наследуются от этого класса.

Исключения генерации

PatternGenerationError

Ошибка в регулярном выражении паттерна.

class PatternGenerationError(GeneratorError):
    """Ошибка написания регулярного выражения"""

Возникает, когда регулярное выражение в паттерне некорректно.

Причины: - Некорректный синтаксис регулярного выражения - Использование неподдерживаемых конструкций

Решение: - Проверьте синтаксис регулярного выражения - Убедитесь, что регулярное выражение может генерировать строки

PatternValueError

Ошибка в диапазоне значений для генерации.

class PatternValueError(GeneratorError):
    """Диапазон для генерации выбран неверно, исправьте регулярное выражение"""

Возникает, когда регулярное выражение задает слишком узкий диапазон для генерации.

Причины: - Слишком ограниченный диапазон символов - Регулярное выражение, которое не может сгенерировать допустимые строки

Решение: - Расширьте диапазон символов в регулярном выражении - Упростите регулярное выражение

TimeoutGenerationError

Превышено время генерации.

class TimeoutGenerationError(GeneratorError):
    """Закончилось время на генерацию"""

Возникает, когда процесс генерации превышает заданный таймаут.

Причины: - Сложные регулярные выражения - Большое количество объектов для генерации - Малый таймаут для сложной генерации - Высокие требования к уникальности

Решение: - Увеличьте значение таймаута - Упростите паттерны - Уменьшите количество запрашиваемых объектов - Используйте ignore_count=True для генерации того, что удалось создать

UniqueGenerationError

Не удалось сгенерировать уникальные объекты.

class UniqueGenerationError(GeneratorError):
    """Не удалось сгенерировать уникальные объекты"""

Возникает, когда не удается сгенерировать нужное количество уникальных объектов.

Причины: - Слишком ограниченные паттерны для уникальных полей - Большое количество запрашиваемых уникальных объектов - Малое значение max_attempts

Решение: - Расширьте паттерны для уникальных полей - Увеличьте значение max_attempts - Используйте ignore_count=True для генерации того, что удалось создать

PatternConfigError

Ошибка в конфигурации паттерна.

class PatternConfigError(GeneratorError):
    """Не задана конфигурация для паттерна"""

Возникает, когда паттерн не имеет корректной конфигурации.

Причины: - Отсутствует атрибут pattern_config - Некорректные значения в PatternConfig - Отсутствует scope в конфигурации - Отсутствуют unique_fields при необходимости уникальности

Решение: - Добавьте атрибут pattern_config к паттерну - Убедитесь, что scope задан и не пуст - Убедитесь, что unique_fields заданы корректно

Исключения хранилища

StorageError

Ошибка при работе с хранилищем.

class StorageError(GeneratorError):
    """Ошибка при работе со ScopeStorage"""

Возникает при ошибках работы с файловой системой или блокировками.

Причины: - Нет доступа к файловой системе - Файлы заблокированы другими процессами - Недостаточно места на диске - Ошибки файловой системы

Решение: - Проверьте права доступа к директории .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]

Рекомендации по обработке ошибок

  1. Всегда обрабатывайте исключения, особенно при генерации большого количества данных
  2. Используйте разные подходы к обработке разных типов ошибок
  3. Логгируйте ошибки для последующего анализа
  4. Предоставляйте понятные сообщения об ошибках пользователям
  5. Используйте значения по умолчанию для параметров таймаута и попыток
  6. Тестируйте обработку ошибок в ваших приложениях
  7. При использовании уникальности всегда предусматривайте обработку UniqueGenerationError
  8. При работе с файлами всегда предусматривайте обработку StorageError