Pular para o conteúdo
Skillpedia
Código em geral41 mil · #4928

python-error-handling

Faz seu agente lidar com erros e validar dados em Python. É útil para criar programas mais confiáveis que sabem como reagir a problemas.

O que ela faz

Esta habilidade ajuda a criar programas de computador em Python que lidam bem com erros. Ela ensina a verificar informações de entrada, usar mensagens de erro claras e a lidar com falhas sem que o programa inteiro pare.

Quando usar

  • ✓Quando você precisa verificar se os dados que o usuário ou outro programa envia estão corretos.
  • ✓Ao criar mensagens de erro que explicam o problema e como consertá-lo.
  • ✓Quando um programa processa muitas coisas e uma falha em uma delas não deve parar tudo.

Exemplo do que pedir para a IA

“Como posso garantir que o número de páginas que o usuário pede esteja entre 1 e 100?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/wshobson/agents/blob/main/plugins/python-development/skills/python-error-handling/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/wshobson/agents/blob/main/plugins/python-development/skills/python-error-handling/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O programa verifica as informações recebidas logo no início. Se algo estiver errado, ele avisa imediatamente com uma mensagem clara. Se estiver processando vários itens, ele tenta continuar mesmo que um item falhe, registrando o que deu certo e o que deu errado.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add wshobson/agents --skill python-error-handling

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/python-development/skills/python-error-handling/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Tratamento de Erros em Python

Crie aplicações Python robustas com validação de entrada adequada, exceções significativas e tratamento de falhas elegante. Um bom tratamento de erros facilita a depuração e torna os sistemas mais confiáveis.

Quando Usar Esta Habilidade

  • Validar entrada do usuário e parâmetros de API
  • Projetar hierarquias de exceção para aplicações
  • Lidar com falhas parciais em operações em lote
  • Converter dados externos para tipos de domínio
  • Criar mensagens de erro amigáveis ao usuário
  • Implementar padrões de validação "fail-fast" (falhar rápido)

Conceitos Principais

1. Falhar Rápido (Fail Fast)

Valide as entradas cedo, antes de operações custosas. Relate todos os erros de validação de uma vez, quando possível.

2. Exceções Significativas

Use tipos de exceção apropriados com contexto. As mensagens devem explicar o que falhou, por quê e como corrigir.

3. Falhas Parciais

Em operações em lote, não deixe que uma falha aborte tudo. Rastreie sucessos e falhas separadamente.

4. Preservar Contexto

Encadeie exceções para manter o rastro completo de erros para depuração.

Início Rápido

def fetch_page(url: str, page_size: int) -> Page:
    if not url:
        raise ValueError("'url' is required")
    if not 1 <= page_size <= 100:
        raise ValueError(f"'page_size' must be 1-100, got {page_size}")
    # Now safe to proceed...

Padrões Fundamentais

Padrão 1: Validação Antecipada de Entrada

Valide todas as entradas nos limites da API antes que qualquer processamento comece.

def process_order(
    order_id: str,
    quantity: int,
    discount_percent: float,
) -> OrderResult:
    """Process an order with validation."""
    # Validate required fields
    if not order_id:
        raise ValueError("'order_id' is required")

    # Validate ranges
    if quantity <= 0:
        raise ValueError(f"'quantity' must be positive, got {quantity}")

    if not 0 <= discount_percent <= 100:
        raise ValueError(
            f"'discount_percent' must be 0-100, got {discount_percent}"
        )

    # Validation passed, proceed with processing
    return _process_validated_order(order_id, quantity, discount_percent)

Padrão 2: Converter para Tipos de Domínio Cedo

Analise strings e dados externos em objetos de domínio tipados nos limites do sistema.

from enum import Enum

class OutputFormat(Enum):
    JSON = "json"
    CSV = "csv"
    PARQUET = "parquet"

def parse_output_format(value: str) -> OutputFormat:
    """Parse string to OutputFormat enum.

    Args:
        value: Format string from user input.

    Returns:
        Validated OutputFormat enum member.

    Raises:
        ValueError: If format is not recognized.
    """
    try:
        return OutputFormat(value.lower())
    except ValueError:
        valid_formats = [f.value for f in OutputFormat]
        raise ValueError(
            f"Invalid format '{value}'. "
            f"Valid options: {', '.join(valid_formats)}"
        )

# Usage at API boundary
def export_data(data: list[dict], format_str: str) -> bytes:
    output_format = parse_output_format(format_str)  # Fail fast
    # Rest of function uses typed OutputFormat
    ...

Padrão 3: Pydantic para Validação Complexa

Use modelos Pydantic para validação de entrada estruturada com mensagens de erro automáticas.

from pydantic import BaseModel, Field, field_validator

class CreateUserInput(BaseModel):
    """Input model for user creation."""

    email: str = Field(..., min_length=5, max_length=255)
    name: str = Field(..., min_length=1, max_length=100)
    age: int = Field(ge=0, le=150)

    @field_validator("email")
    @classmethod
    def validate_email_format(cls, v: str) -> str:
        if "@" not in v or "." not in v.split("@")[-1]:
            raise ValueError("Invalid email format")
        return v.lower()

    @field_validator("name")
    @classmethod
    def normalize_name(cls, v: str) -> str:
        return v.strip().title()

# Usage
try:
    user_input = CreateUserInput(
        email="user@example.com",
        name="john doe",
        age=25,
    )
except ValidationError as e:
    # Pydantic provides detailed error information
    print(e.errors())

Padrão 4: Mapear Erros para Exceções Padrão

Use os tipos de exceção integrados do Python apropriadamente, adicionando contexto conforme necessário.

Tipo de Falha Exceção Exemplo
Entrada inválida ValueError Valores de parâmetro incorretos
Tipo incorreto TypeError Esperado string, recebido int
Item ausente KeyError Chave de dicionário não encontrada

…

Perguntas frequentes

Por que é importante verificar os dados logo no começo?

Verificar os dados no início (chamado de 'fail fast') evita que o programa gaste tempo e recursos processando informações inválidas, além de facilitar a identificação do problema.

O que são 'exceções significativas'?

São tipos de erro específicos (como `ValueError` ou `TypeError`) que dizem exatamente o que deu errado, por que aconteceu e como consertar, em vez de um erro genérico.

Como lidar com falhas em processamento de muitos itens?

Em vez de parar tudo se um item falhar, o programa pode registrar essa falha e continuar processando os outros itens, informando depois quais tiveram sucesso e quais falharam.

Detalhes

Descrição original do autor

Python error handling patterns including input validation, exception hierarchies, and partial failure handling. Use when implementing validation logic, designing exception strategies, handling batch processing failures, or building robust APIs.

repo: wshobson/agents

Popularidade

Estrelas no GitHub
41 mil
Posição no ranking
#4928
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas