Модуль exceptions.py содержит набор пользовательских исключений для обработки ошибок в SpritePro.
SpritePro определяет собственные исключения для более точной идентификации и обработки ошибок, связанных с игровой логикой, графикой и системами движка.
Базовый класс для всех исключений SpritePro.
from spritePro.exceptions import SpriteProException
try:
# код
except SpriteProException as e:
print(f"Ошибка SpritePro: {e}")Возникает при ошибке загрузки спрайта.
from spritePro.exceptions import SpriteLoadError
try:
sprite = load_image("nonexistent.png")
except SpriteLoadError as e:
print(f"Не удалось загрузить спрайт: {e.filename}")Атрибуты:
filename— путь к файлу, который не удалось загрузить
Возникает, когда запрошенный спрайт не найден.
from spritePro.exceptions import SpriteNotFoundError
try:
sprite = SpritePro.get_sprite("player_v2")
except SpriteNotFoundError:
print("Спрайт не найден в кэше")Возникает при недопустимых параметрах спрайта.
from spritePro.exceptions import InvalidSpriteError
try:
sprite.set_position("invalid") # Неверный тип
except InvalidSpriteError:
print("Недопустимое значение позиции")Возникает при ошибках анимации.
from spritePro.exceptions import AnimationError
try:
anim.play_frame(999) # Кадр не существует
except AnimationError as e:
print(f"Ошибка анимации: {e}")Возникает, когда сцена не найдена.
from spritePro.exceptions import SceneNotFoundError
try:
game.set_scene("NonExistentScene")
except SceneNotFoundError:
print("Сцена не найдена")Возникает при ошибке инициализации сцены.
from spritePro.exceptions import InvalidSceneError
try:
class BadScene(Scene):
def __init__(self):
raise ValueError("Ошибка в сцене")
except InvalidSceneError:
print("Неверная конфигурация сцены")Возникает при ошибках физической системы.
from spritePro.exceptions import PhysicsError
try:
body.set_velocity("invalid")
except PhysicsError:
print("Ошибка в физическом теле")Возникает при ошибках коллизий.
from spritePro.exceptions import CollisionError
try:
collider.check_collision(None)
except CollisionError:
print("Недопустимый объект для проверки коллизий")Возникает при ошибке загрузки ассета.
from spritePro.exceptions import AssetLoadError
try:
asset = load_asset("sound.wav")
except AssetLoadError:
print("Не удалось загрузить ассет")Возникает при сетевых ошибках.
from spritePro.exceptions import NetworkError
try:
mp.connect("192.168.1.100", 5000)
except NetworkError:
print("Ошибка сетевого подключения")Возникает при недопустимом состоянии объекта.
from spritePro.exceptions import InvalidStateError
try:
anim.pause() # Анимация уже запущена
except InvalidStateError:
print("Недопустимое состояние для этой операции")Возникает при ошибках конфигурации.
from spritePro.exceptions import ConfigurationError
try:
game.load_config("invalid.json")
except ConfigurationError:
print("Ошибка в конфигурации")SpriteProException (базовый класс)
├── SpriteLoadError
│ └── SpriteNotFoundError
├── InvalidSpriteError
├── AnimationError
├── SceneException
│ ├── SceneNotFoundError
│ └── InvalidSceneError
├── PhysicsException
│ ├── PhysicsError
│ └── CollisionError
├── AssetLoadError
├── NetworkError
├── InvalidStateError
└── ConfigurationError
from spritePro.exceptions import SpriteProException
try:
game.setup()
except SpriteProException as e:
print(f"Ошибка SpritePro: {e}")
except Exception as e:
print(f"Неизвестная ошибка: {e}")from spritePro.exceptions import (
SpriteLoadError,
AssetLoadError,
NetworkError
)
try:
load_game_content()
except (SpriteLoadError, AssetLoadError, NetworkError):
print("Ошибка загрузки контента")def safe_load_sprite(path):
from spritePro.exceptions import SpriteLoadError
try:
return load_image(path)
except SpriteLoadError:
return load_image("default.png")
print(f"Используем спрайт по умолчанию вместо {path}")def validate_sprite(sprite):
from spritePro.exceptions import InvalidSpriteError
if sprite is None:
raise InvalidSpriteError("Спрайт не может быть None")
if not hasattr(sprite, 'position'):
raise InvalidSpriteError("Спрайт не имеет позиции")
return Truefrom spritePro.exceptions import SceneNotFoundError
class Game(SpritePro):
def __init__(self):
super().__init__()
self.scenes = {
'menu': MenuScene,
'game': GameScene,
'pause': PauseScene
}
def set_scene(self, name):
if name not in self.scenes:
raise SceneNotFoundError(f"Сцена '{name}' не найдена")
scene_class = self.scenes[name]
super().set_scene(scene_class())from spritePro.exceptions import SpriteProException
class GameSpecificError(SpriteProException):
"""Исключение для специфических ошибок игры"""
def __init__(self, message, game_state=None):
super().__init__(message)
self.game_state = game_state- Используйте специфичные исключения — перехватывайте конкретные типы
- Обрабатывайте базовые исключения последними — для неожиданных ошибок
- Логируйте ошибки — записывайте информацию для отладки
- Предоставляйте fallback — используйте значения по умолчанию
- Не скрывайте ошибки без причины — информация об ошибках важна