Enums Intro (Safety and Readability)
On this page
Why Enums
Enums prevent typos and invalid states, especially when values cross boundaries (config, APIs, storage).
Define an Enum
from enum import Enum
class Status(str, Enum):
PENDING = "pending"
OK = "ok"
FAIL = "fail"
Use in Validation
def parse_status(value: str) -> Status:
try:
return Status(value)
except ValueError as e:
raise ValueError(f"invalid status: {value}") from e
Operational Checklist
- Replace magic strings with enums for stable domains (status, role, type).
- Convert external inputs at the boundary (parse/validate early).
- Prefer string enums when values are serialized.
Failure Modes
- Magic strings: typos create unreachable branches and silent bugs.
- Late validation: invalid values spread before failing.