python-anti-patterns
Ajuda seu agente a identificar e evitar erros comuns de programação em Python. É útil para revisar código e garantir que ele siga boas práticas.
O que ela faz
Esta ferramenta ajuda a encontrar erros comuns e práticas ruins em códigos escritos em Python. Ela funciona como uma lista de verificação para garantir que o código esteja escrito da melhor forma possível.
Quando usar
- ✓Ao revisar um código antes de aprová-lo.
- ✓Ao tentar corrigir problemas difíceis de entender.
- ✓Ao ensinar ou aprender as melhores práticas de Python.
Exemplo do que pedir para a IA
“Revise este código Python para encontrar erros comuns.”
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
Mensagem pronta para colar
Como funciona
A ferramenta compara seu código com uma lista de 'anti-padrões', que são jeitos conhecidos de escrever código que causam problemas. Ela aponta onde seu código se parece com esses exemplos ruins e sugere como consertar.
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-anti-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/python-development/skills/python-anti-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Checklist de Anti-Padrões em Python
Um checklist de referência de erros comuns e anti-padrões em código Python. Revise isso antes de finalizar implementações para identificar problemas cedo.
Quando Usar Esta Habilidade
- Revisar código antes de mesclar (merge)
- Depurar problemas misteriosos
- Ensinar ou aprender boas práticas em Python
- Estabelecer padrões de codificação da equipe
- Refatorar código legado
Nota: Esta habilidade foca no que evitar. Para orientação sobre padrões positivos e arquitetura, veja a habilidade python-design-patterns.
Anti-Padrões de Infraestrutura
Lógica de Timeout/Tentativa Espalhada
# BAD: Timeout logic duplicated everywhere
def fetch_user(user_id):
try:
return requests.get(url, timeout=30)
except Timeout:
logger.warning("Timeout fetching user")
return None
def fetch_orders(user_id):
try:
return requests.get(url, timeout=30)
except Timeout:
logger.warning("Timeout fetching orders")
return None
Correção: Centralize em decoradores (decorators) ou wrappers de cliente.
# GOOD: Centralized retry logic
@retry(stop=stop_after_attempt(3), wait=wait_exponential())
def http_get(url: str) -> Response:
return requests.get(url, timeout=30)
Tentativa Dupla (Double Retry)
# BAD: Retrying at multiple layers
@retry(max_attempts=3) # Application retry
def call_service():
return client.request() # Client also has retry configured!
Correção: Tente em apenas uma camada. Conheça o comportamento de tentativa da sua infraestrutura.
Configuração Codificada (Hard-Coded)
# BAD: Secrets and config in code
DB_HOST = "prod-db.example.com"
API_KEY = "sk-12345"
def connect():
return psycopg.connect(f"host={DB_HOST}...")
Correção: Use variáveis de ambiente com configurações tipadas.
# GOOD
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
db_host: str = Field(alias="DB_HOST")
api_key: str = Field(alias="API_KEY")
settings = Settings()
Anti-Padrões de Arquitetura
Tipos Internos Expostos
# BAD: Leaking ORM model to API
@app.get("/users/{id}")
def get_user(id: str) -> UserModel: # SQLAlchemy model
return db.query(UserModel).get(id)
Correção: Use DTOs (Data Transfer Objects)/modelos de resposta.
# GOOD
@app.get("/users/{id}")
def get_user(id: str) -> UserResponse:
user = db.query(UserModel).get(id)
return UserResponse.from_orm(user)
Lógica de I/O e de Negócios Misturada
# BAD: SQL embedded in business logic
def calculate_discount(user_id: str) -> float:
user = db.query("SELECT * FROM users WHERE id = ?", user_id)
orders = db.query("SELECT * FROM orders WHERE user_id = ?", user_id)
# Business logic mixed with data access
if len(orders) > 10:
return 0.15
return 0.0
Correção: Padrão Repository (Repositório). Mantenha a lógica de negócios pura.
# GOOD
def calculate_discount(user: User, orders: list[Order]) -> float:
# Pure business logic, easily testable
if len(orders) > 10:
return 0.15
return 0.0
Anti-Padrões de Tratamento de Erros
Tratamento de Exceção Genérico (Bare Exception Handling)
# BAD: Swallowing all exceptions
try:
process()
except Exception:
pass # Silent failure - bugs hidden forever
Correção: Capture exceções específicas. Registre (log) ou trate apropriadamente.
# GOOD
try:
process()
except ConnectionError as e:
logger.warning("Connection failed, will retry", error=str(e))
raise
except ValueError as e:
logger.error("Invalid input", error=str(e))
raise BadRequestError(str(e))
Falhas Parciais Ignoradas
# BAD: Stops on first error
def process_batch(items):
results = []
for item in items:
result = process(item) # Raises on error - batch aborted
results.append(result)
return results
Correção: Capture tanto sucessos quanto falhas.
# GOOD
def process_batch(items) -> BatchResult:
succeeded = {}
failed = {}
for idx, item in enumerate(items):
try:
succeeded[idx] = process(item)
except Exception as e:
failed[idx] = e
return BatchResult(succeeded, failed)
Validação de Entrada Ausente
# BAD: No validation
def create_user(data: dict):
return User(**data) # Crashes deep in code on bad input
Correção: Valide cedo nos limites da API.
# GOOD
def create_user(data: dict) -> User:
validated = CreateUserInput.model_validate(data)
return User.from_input(validated)
Anti-Padrões de Recursos
…
Perguntas frequentes
O que é um 'anti-padrão'?
É uma solução comum para um problema que, na prática, acaba criando mais problemas do que resolve. É como usar um martelo para apertar um parafuso: funciona, mas não é a ferramenta certa e pode estragar tudo.
Essa ferramenta corrige os erros sozinha?
Não, ela aponta os erros e sugere como consertar. A correção final é feita pelo programador.
Preciso saber muito de Python para usar?
Ajuda saber o básico, mas a ferramenta é feita para ser entendida mesmo por quem está começando, pois foca em erros comuns e explicações simples.
Detalhes
Descrição original do autor
Use this skill when reviewing Python code for common anti-patterns to avoid. Use as a checklist when reviewing code, before finalizing implementations, or when debugging issues that might stem from known bad practices.
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4923
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC