Communitygithub.com

wshobson/python-error-handling

Python 오류 처리 패턴: 입력 유효성 검사, 예외 계층 구조, 부분 실패 처리. 검증 로직 구현, 예외 전략 설계, 배치 처리 실패 처리 또는 견고한 API 구축 시 사용하세요.

python-error-handling란 무엇인가요?

이 스킬은 Python 애플리케이션에서 오류 처리를 위한 포괄적인 패턴을 제공하며, 입력 유효성 검사, 예외 계층 구조 설계, 부분 실패 처리 메커니즘을 다룹니다. 개발자가 검증 로직을 구현하거나 예외 전략을 설계할 때, 특히 배치 처리 실패를 안전하게 처리하고 견고한 API를 구축해야 할 때 유용합니다. 이 스킬은 Cursor, Codex, Claude Code 등 다양한 AI 지원 개발 환경에서 사용할 수 있으며, `SKILL.md` 문서에 기반하여 검증 데코레이터, 사용자 정의 예외 클래스, 부분 실패 수집기와 같은 재사용 가능한 컴포넌트를 제공합니다. 핵심 원칙은 '조기에 실패하고 명확하게 실패하라'는 것으로, 시스템의 탄력성과 유지보수성을 크게 향상시킵니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wshobson/agents/tree/main/skills/python-error-handling

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

python-error-handling은(는) 무엇을 하나요?

Python 오류 처리 패턴: 입력 유효성 검사, 예외 계층 구조, 부분 실패 처리. 검증 로직 구현, 예외 전략 설계, 배치 처리 실패 처리 또는 견고한 API 구축 시 사용하세요.

개요

이 스킬은 Python 애플리케이션에서 오류를 효과적으로 처리하기 위한 모범 사례와 패턴을 제공합니다. 입력 유효성 검사, 예외 계층 구조 설계, 부분 실패 처리를 중점적으로 다룹니다.

주요 패턴

1. 입력 유효성 검사

from dataclasses import dataclass
from typing import Optional
from enum import Enum

class UserRole(Enum):
    ADMIN = "admin"
    USER = "user"
    GUEST = "guest"

@dataclass
class UserInput:
    name: str
    age: int
    role: UserRole

def validate_user_input(data: dict) -> Optional[str]:
    """사용자 입력 검증. 오류 메시지를 반환하거나 None을 반환."""
    if not data.get("name"):
        return "이름은 필수입니다."
    if not isinstance(data.get("age"), int) or data["age"] < 0:
        return "유효한 나이를 입력하세요."
    try:
        UserRole(data.get("role", "user"))
    except ValueError:
        return f"유효하지 않은 역할: {data.get('role')}"
    return None

2. 예외 계층 구조

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, message: str, field: str = None):
        self.field = field
        super().__init__(message, code=400)

class NotFoundError(AppError):
    """리소스를 찾을 수 없을 때 발생."""
    def __init__(self, message: str, resource_id: str = None):
        self.resource_id = resource_id
        super().__init__(message, code=404)

class BusinessError(AppError):
    """비즈니스 규칙 위반 시 발생."""
    def __init__(self, message: str, code: int = 409):
        super().__init__(message, code)

3. 부분 실패 처리

from dataclasses import dataclass, field
from typing import List, TypeVar, Generic

T = TypeVar("T")
E = TypeVar("E")

@dataclass
class Result(Generic[T, E]):
    """성공 또는 실패를 나타내는 결과 타입."""
    value: T = None
    error: E = None
    is_success: bool = True

def process_batch(items: List[dict]) -> List[Result]:
    """배치 처리: 각 항목의 성공/실패를 개별 수집."""
    results = []
    for item in items:
        try:
            processed = process_item(item)
            results.append(Result(value=processed))
        except Exception as e:
            results.append(Result(error=str(e), is_success=False))
    return results

4. 검증 데코레이터

from functools import wraps
from typing import Callable, Any

def validate_input(schema: type) -> Callable:
    """입력 검증 데코레이터."""
    def decorator(func: Callable) -> Callable:
        @wraps(func)
        def wrapper(*args, **kwargs):
            data = kwargs.get("data", {})
            error = validate_user_input(data)
            if error:
                raise ValidationError(error)
            return func(*args, **kwargs)
        return wrapper
    return decorator

API 예시

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/users", methods=["POST"])
@validate_input(UserInput)
def create_user():
    data = request.get_json()
    # 유효성 검사는 데코레이터에서 처리됨
    user = create_user_in_db(data)
    return jsonify(user), 201

@app.errorhandler(AppError)
def handle_app_error(error):
    response = {"error": error.message}
    return jsonify(response), error.code

모범 사례

  1. 조기에 실패, 명확하게 실패: 가능한 빨리 입력을 검증하고 명확한 오류 메시지를 제공하세요.
  2. 풍부한 예외 사용: 의미 있는 속성(예: 오류 코드, 필드 이름)을 가진 사용자 정의 예외를 만드세요.
  3. 부분 실패 처리: 배치 처리 시 오류가 한 항목에 국한되도록 하고, 전체 작업을 중단하지 마세요.
  4. 결과 타입 활용: 성공/실패를 명시적으로 표현하는 Result 타입을 도입하세요.
  5. 데코레이터로 관심사 분리: 검증 로직을 비즈니스 로직에서 분리하세요.

참고

  • 이 패턴들은 Flask, FastAPI, Django 등 모든 Python 프레임워크와 호환됩니다.
  • 자세한 내용은 Python 공식 문서를 참조하세요.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

wshobson/accessibility-compliance

Implement WCAG 2.2 compliant interfaces with mobile accessibility, inclusive design patterns, and assistive technology support. Use when auditing accessibility, implementing ARIA patterns, building for screen readers, or ensuring inclusive user experiences.

wshobson/airflow-dag-patterns

Build production Apache Airflow DAGs with best practices for operators, sensors, testing, and deployment. Use when creating data pipelines, orchestrating workflows, or scheduling batch jobs.

wshobson/angular-migration

Migrate from AngularJS to Angular using hybrid mode, incremental component rewriting, and dependency injection updates. Use when upgrading AngularJS applications, planning framework migrations, or modernizing legacy Angular code.

wshobson/anti-reversing-techniques

Understand anti-reversing, obfuscation, and protection techniques encountered during software analysis. Use this skill when analyzing malware evasion techniques, when implementing anti-debugging protections for CTF challenges, when reverse engineering packed binaries, or when building security research tools that need to detect virtualized environments.

wshobson/api-design-principles

Master REST and GraphQL API design principles to build intuitive, scalable, and maintainable APIs that delight developers. Use when designing new APIs, reviewing API specifications, or establishing API design standards.

wshobson/architecture-decision-records

Write and maintain Architecture Decision Records (ADRs) following best practices for technical decision documentation. Use when documenting significant technical decisions, reviewing past architectural choices, or establishing decision processes.

wshobson/architecture-patterns

Implement proven backend architecture patterns including Clean Architecture, Hexagonal Architecture, and Domain-Driven Design. Use this skill when designing clean architecture for a new microservice, when refactoring a monolith to use bounded contexts, when implementing hexagonal or onion architecture patterns, or when debugging dependency cycles between application layers.

wshobson/async-python-patterns

Master Python asyncio, concurrent programming, and async/await patterns for high-performance applications. Use when building async APIs, concurrent systems, or I/O-bound applications requiring non-blocking operations.

wshobson/attack-tree-construction

Build comprehensive attack trees to visualize threat paths. Use when mapping attack scenarios, identifying defense gaps, or communicating security risks to stakeholders.

wshobson/auth-implementation-patterns

Master authentication and authorization patterns including JWT, OAuth2, session management, and RBAC to build secure, scalable access control systems. Use when implementing auth systems, securing APIs, or debugging security issues.

wshobson/avoid-ai-writing

Audit and rewrite prose so it stops reading as machine-generated. Use this skill when asked to remove AI-isms, clean up AI writing, edit a draft for AI tells, audit a README, changelog, release note, PR description, or blog post for machine-sounding prose, or make text sound less like AI. Supports a detect-only mode, a rewrite mode, and an edit-in-place mode, with optional voice and context profiles.

wshobson/backtesting-frameworks

Build robust backtesting systems for trading strategies with proper handling of look-ahead bias, survivorship bias, and transaction costs. Use when developing trading algorithms, validating strategies, or building backtesting infrastructure.

wshobson/bash-defensive-patterns

Master defensive Bash programming techniques for production-grade scripts. Use when writing robust shell scripts, CI/CD pipelines, or system utilities requiring fault tolerance and safety.

wshobson/bats-testing-patterns

Master Bash Automated Testing System (Bats) for comprehensive shell script testing. Use when writing tests for shell scripts, CI/CD pipelines, or requiring test-driven development of shell utilities.

wshobson/bazel-build-optimization

Optimize Bazel builds for large-scale monorepos. Use when configuring Bazel, implementing remote execution, or optimizing build performance for enterprise codebases.

wshobson/before-you-build

Pre-build product and feature risk review for founders, product managers, and AI-assisted builders. Use this skill when the user is about to build a landing page, MVP, SaaS product, internal tool, agent workflow, or major feature and needs to check demand, positioning, monetization, retention, trust, distribution, and adoption risk before implementation starts.

wshobson/billing-automation

Build automated billing systems for recurring payments, invoicing, subscription lifecycle, and dunning management. Use when implementing subscription billing, automating invoicing, or managing recurring payment systems.

wshobson/binary-analysis-patterns

Master binary analysis patterns including disassembly, decompilation, control flow analysis, and code pattern recognition. Use when analyzing executables, understanding compiled code, or performing static analysis on binaries.

wshobson/block-no-verify-hook

Configure a PreToolUse hook to prevent AI agents from skipping git pre-commit hooks with --no-verify and other bypass flags. Use when setting up Claude Code projects that enforce commit quality gates.

wshobson/brand-landingpage

Brand-first landing page designer — runs a brand-identity interview (colors, typography, shape language), then generates and iterates on a polished landing page via Stitch with deployment-ready HTML. Use when the user asks to create, design, or build a landing page, homepage, or marketing page and has no established visual direction. Skip when they have a design mockup, need a dashboard or app UI, are working at component level, building a multi-page app, or restyling with known design tokens — use frontend-design instead.

관련 스킬