Prefira funções pequenas, entradas explícitas e validação na borda do pipeline.
python --version
python -m venv .venv
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m pytest -qNo PowerShell, ative o ambiente com .venv\Scripts\Activate.ps1. No Bash, use source .venv/bin/activate.
from pathlib import Path
import csv
def read_rows(path: Path) -> list[dict[str, str]]:
with path.open(encoding="utf-8", newline="") as source:
return list(csv.DictReader(source))
def require_columns(rows: list[dict[str, str]], required: set[str]) -> None:
available = set(rows[0]) if rows else set()
missing = required - available
if missing:
raise ValueError(f"Colunas ausentes: {sorted(missing)}")import logging
logger = logging.getLogger(__name__)
try:
process_batch()
except ValueError as exc:
logger.error("Lote inválido: %s", exc)
raiseNão capture Exception sem contexto. Preserve a causa e faça o processo retornar código de saída diferente de zero.
- use
pathlib.Pathpara caminhos; - mantenha credenciais fora do código;
- separe leitura, validação, transformação e escrita;
- grave saída de forma idempotente;
- teste lote vazio, schema inválido, duplicidade e falha parcial;
- registre contagens de entrada, válidos, rejeitados e saída.