class AppError(Exception):↵
def __init__(self, message: str, code: int = 500):↵
self.message = message↵
self.code = code↵
super().__init__(self.message)↵
↵
class ValidationError(AppError):↵
def __init__(self, field: str, message: str):↵
self.field = field↵
super().__init__(f"{field}: {message}", code=400)↵
↵
class NotFoundError(AppError):↵
def __init__(self, resource: str, id: str):↵
self.resource = resource↵
self.id = id↵
super().__init__(f"{resource} with id '{id}' not found", code=404)↵
↵
def process(data):↵
if not data.get("name"):↵
raise ValidationError("name", "is required")↵
raise NotFoundError("User", data.get("id", "unknown"))↵
↵
try:↵
process({"id": "123"})↵
except AppError as e:↵
print(f"Error [{e.code}]: {e.message}")