python-best-practices

Pass

Python coding best practices. Use when writing or reviewing Python code. Covers type hints, error handling, and common patterns.

@Taoidle
MIT2/19/2026
(0)
7
1
3

Install Skill

Skills are third-party code from public GitHub repositories. SkillHub scans for known malicious patterns but cannot guarantee safety. Review the source code before installing.

Install globally (user-level):

npx skillhub install Taoidle/planning-with-files/python-best-practices

Install in current project:

npx skillhub install Taoidle/planning-with-files/python-best-practices --project

Suggested path: ~/.claude/skills/python-best-practices/

SKILL.md Content

---
name: python-best-practices
description: Python coding best practices. Use when writing or reviewing Python code. Covers type hints, error handling, and common patterns.
license: MIT
metadata:
  author: plan-cascade
  version: "1.0.0"
---

# Python Best Practices

## Code Style

| Rule | Guideline |
|------|-----------|
| Formatter | `ruff format` or `black` |
| Linter | `ruff check` with strict rules |
| Type hints | Always for public APIs |
| Docstrings | Google or NumPy style |

## Type Hints

```python
def process(items: list[str], max_count: int = 10) -> dict[str, int]: ...
def find_user(user_id: int) -> User | None: ...
```

## Error Handling

| Rule | Guideline |
|------|-----------|
| Specific exceptions | Never bare `except:` |
| Context managers | Use `with` for resources |
| Early return | Validate inputs, fail fast |

```python
# Good
try:
    result = process(data)
except ValidationError as e:
    logger.warning(f"Validation failed: {e}")
    return default
```

## Project Structure

```
src/package_name/
├── __init__.py
├── core/
└── py.typed
tests/
├── conftest.py
└── test_*.py
pyproject.toml
```

## Common Patterns

| Pattern | Usage |
|---------|-------|
| `@dataclass` | Data containers |
| `@property` | Computed attributes |
| Generators | Memory-efficient iteration |
| `functools.cache` | Memoization |

## Anti-Patterns

| Avoid | Use Instead |
|-------|-------------|
| Mutable default args | `None` default, create inside |
| `import *` | Explicit imports |
| Global state | Dependency injection |

```python
# Bad: def add(item, items=[]): ...
# Good:
def add(item, items=None):
    items = items or []
    items.append(item)
    return items
```

## Tools

| Tool | Purpose |
|------|---------|
| `pytest` | Testing |
| `ruff` | Linting + formatting |
| `mypy` | Type checking |
| `uv` | Dependencies |