✧ Исключения в Python ✧

⚠️ Теория: Исключения в Python

Исключения - как система проверки прочности в гача-играх. Если что-то идёт не так, у нас есть механизм защиты! Они позволяют обрабатывать ошибки и необычные ситуации в программе. Вместо аварийного завершения программы, мы можем корректно обработать проблему.

Базовая обработка исключений:

# Простой try-except
try:
    primogems = int(input("Сколько примогемов потратить? "))
    if primogems < 0:
        raise ValueError("Отрицательное количество примогемов!")
except ValueError as e:
    print(f"Ошибка: {e}")

# Несколько типов исключений
try:
    character = characters[0]
    talent_level = character["talents"]["normal"]
except IndexError:
    print("Список персонажей пуст!")
except KeyError:
    print("У персонажа нет данных о талантах!")

Блоки else и finally:

# Полная структура try-except
try:
    wishes = pull_banner(primogems)
    if wishes == 0:
        raise Exception("Недостаточно примогемов!")
except Exception as e:
    print(f"Ошибка при круткax: {e}")
else:
    # Выполняется если не было исключений
    print(f"Успешно потрачено {primogems} примогемов")
finally:
    # Выполняется всегда
    print(f"Остаток примогемов: {current_primogems}")

Создание своих исключений:

# Собственные классы исключений
class NotEnoughMaterialsError(Exception):
    pass

class TalentLevelError(Exception):
    pass

def level_up_talent(character, books, mora):
    if books < 3:
        raise NotEnoughMaterialsError(
            "Недостаточно книг талантов!"
        )
    if mora < 12500:
        raise NotEnoughMaterialsError(
            "Недостаточно моры!"
        )

🎮 Задача: Система прокачки артефактов

Создайте безопасную систему улучшения артефактов с обработкой всех возможных ошибок.

Возможные проблемы:

  • Недостаточно материалов или моры
  • Артефакт уже максимального уровня
  • Попытка использовать 5★ артефакт как материал
  • Некорректный выбор артефакта для улучшения

Реализуйте:

💡 Подсказка:

# Пример структуры исключений
class ArtifactError(Exception):
    """Базовый класс для ошибок артефактов"""
    pass

class MaxLevelError(ArtifactError):
    """Артефакт максимального уровня"""
    pass

def enhance_artifact(artifact, materials, mora):
    try:
        # Проверки и улучшение
        log_operation("start_enhance", artifact)
        # ...
    except ArtifactError as e:
        log_operation("error", str(e))
        raise
    else:
        log_operation("success", artifact)
        save_changes()
⟵ Множества Условные операторы ⟶