| name | python-code-review |
| description | Reviews Python code for type safety, async patterns, error handling, and common mistakes. Use when reviewing .py files, checking type hints, async/await usage, or exception handling. |
Python Code Review
Quick Reference
Review Checklist
PEP8 Style
Type Safety
Async Patterns
Error Handling
Common Mistakes
Valid Patterns (Do NOT Flag)
These patterns are intentional and correct - do not report as issues:
- Type annotation vs type assertion - Annotations declare types but are not runtime assertions; don't confuse with missing validation
- Using
Any when interacting with untyped libraries - Required when external libraries lack type stubs
- Empty
__init__.py files - Valid for package structure, no code required
noqa comments - Valid when linter rule doesn't apply to specific case
- Using
cast() after runtime type check - Correct pattern to inform type checker of narrowed type
Context-Sensitive Rules
Only flag these issues when the specific conditions apply:
| Issue | Flag ONLY IF |
|---|
| Generic exception handling | Specific exception types are available and meaningful |
| Unused variables | Variable lacks _ prefix AND isn't used in f-strings, logging, or debugging |
Gates (reporting workflow)
Complete in order. Do not advance until each pass condition is met.
- Scope โ Pass: You list every
.py path (or explicit glob) you inspected this run.
- False-positive screen โ Pass: For each issue you plan to report, you checked Valid Patterns and Context-Sensitive Rules above; you drop or narrow the finding if those sections say not to flag it.
- Evidence โ Pass: Each remaining finding includes
[FILE:LINE] (or a bounded line range). Symbols or short verbatim snippets may supplement the location anchor but do not replace it.
- Verification protocol โ Pass: You load review-verification-protocol and complete its mandatory steps for each reported issue before the user-facing write-up.
- Ship โ Pass: The user-visible output matches whatever structure that protocol requires (no issues-only dump that skips its checks).
When to Load References
- Reviewing code formatting/style โ pep8-style.md
- Reviewing function signatures โ type-safety.md
- Reviewing
async def functions โ async-patterns.md
- Reviewing try/except blocks โ error-handling.md
- General Python review โ common-mistakes.md
Review Questions
- Does the code follow PEP8 formatting (indentation, line length, whitespace)?
- Are imports properly grouped (stdlib โ third-party โ local)?
- Do names follow conventions (snake_case, CamelCase, UPPER_CASE)?
- Are all function signatures fully typed?
- Are async functions truly non-blocking?
- Do exceptions include meaningful context?
- Are there any mutable default arguments?
Before reporting: complete Gates (reporting workflow) above (especially gate 4).