Python development guidance with code quality standards, error handling, testing practices, and environment management...
Python development guidance focused on code quality, error handling, testing, and environment management. Apply when working with Python code or Jupyter notebooks.
Use this skill when:
def calculate_total(items: list[dict[str, float]], tax_rate: float = 0.08) -> float:
"""Calculate total cost including tax.
Args:
items: List of items with 'price' key
tax_rate: Tax rate as decimal (default 0.08)
Returns:
Total cost including tax
Raises:
ValueError: If tax_rate is negative or items list is empty
"""
if not items:
raise ValueError("Items list cannot be empty")
if tax_rate < 0:
raise ValueError("Tax rate cannot be negative")
subtotal = sum(item['price'] for item in items)
return subtotal * (1 + tax_rate)
exceptwith statements for resource managementdef process_file(file_path: str) -> list[str]:
"""Process file and return lines.
Args:
file_path: Path to file
Returns:
List of non-empty lines
Raises:
FileNotFoundError: If file doesn't exist
PermissionError: If file cannot be read
"""
if not file_path:
raise ValueError("File path cannot be empty")
try:
with open(file_path, 'r', encoding='utf-8') as f:
return [line.strip() for line in f if line.strip()]
except FileNotFoundError:
raise FileNotFoundError(f"File not found: {file_path}")
except PermissionError:
raise PermissionError(f"Permission denied: {file_path}")
./tests/ directory__init__.py in tests directoryproject/
├── src/
│ └── my_module.py
└── tests/
├── __init__.py
└── test_my_module.py
# tests/test_calculations.py
import pytest
from src.calculations import calculate_total
def test_calculate_total_basic():
"""Test basic total calculation."""
items = [{'price': 10.0}, {'price': 20.0}]
result = calculate_total(items, tax_rate=0.1)
assert result == 33.0
def test_calculate_total_empty_list():
"""Test error handling for empty list."""
with pytest.raises(ValueError, match="Items list cannot be empty"):
calculate_total([])
def test_calculate_total_negative_tax():
"""Test error handling for negative tax rate."""
items = [{'price': 10.0}]
with pytest.raises(ValueError, match="Tax rate cannot be negative"):
calculate_total(items, tax_rate=-0.1)
pip, python3 -m venv, or conda — uv handles all of thispyproject.toml (not requirements.txt)# Install dependencies from pyproject.toml
uv sync
# Install with optional dev dependencies
uv sync --extra dev
# Run a script (no activation needed)
uv run python script.py
# Run pytest
uv run pytest
# Add a new dependency
uv add requests
# Remove a dependency
uv remove requests
uv run to execute scripts — no manual venv activation neededuv run <tool> for dev tools (pytest, ruff, etc.)pyproject.toml (not requirements.txt)# Lint code
uv run ruff check .
# Lint and auto-fix
uv run ruff check --fix .
# Format code
uv run ruff format .
# Check formatting without changes
uv run ruff format --check .
# Check types
uv run pyright
Note: Use pyright for type checking — do not use mypy.
./tests/, all must passuv exclusively for dependencies and execution, Ruff for linting/formatting, Pyright for type checking