Python Code Review 是一个面向 Python 代码审查的技能,可用于在审查 .py 文件、检查类型提示、async/await 用法等场景中系统化地发现问题。
用途与覆盖范围 它围绕五类问题提供快速参考索引:缩进、行长、空白与命名对应 references/pep8-style.md;缺失或错误的类型提示、Any 的使用对应 references/type-safety.md;异步函数中的阻塞调用、缺失 await 对应 references/async-patterns.md;裸 except、缺失上下文、日志记录对应 references/error-handling.md;可变默认参数、print 语句对应 references/common-mistakes.md。
主要能力 技能提供一份审查清单,覆盖 PEP8 风格、类型安全、异步模式、错误处理与常见错误。PEP8 方面包括 4 空格缩进(不使用制表符)、行长不超过 79 字符(文档字符串与注释不超过 72)、顶层定义前后两空行、类内一空行、导入按标准库→第三方→本地分组并用空行分隔、括号内及冒号/逗号前无空格、命名采用函数与变量 snake_case、类 CamelCase、常量 UPPER_CASE、行内注释至少两个空格分隔。类型安全方面要求所有函数参数与返回类型都有类型提示,除非必要不使用 Any(并注释说明原因),使用 T | None 语法(Python 3.10+)。异步模式方面要求异步函数内无阻塞调用(如 time.sleep、requests),所有协程正确 await。错误处理方面要求不用裸 except:,使用具体异常类型并附上下文,用 raise ... from 保留堆栈。常见错误方面要求不用可变默认参数,输出使用 logger 而非 print(),优先使用 f-string 而非 .format() 或 %。
不应报告的模式 技能明确列出有意且正确的模式,不应作为问题报告:类型注解与类型断言的区分(注解声明类型但非运行时断言,不要与缺少验证混淆);与无类型库交互时使用 Any(外部库缺少类型存根时必要);空 init.py 文件(包结构有效,无需代码);noqa 注释(当 linter 规则不适用于特定情况时有效);运行时类型检查后使用 cast()(告知类型检查器收窄后的类型的正确模式)。
上下文相关规则 仅在特定条件满足时才标记:泛型异常处理,仅当有具体、有意义的异常类型可用时才标记;未使用变量,仅当变量没有 _ 前缀且未用于 f-string、日志或调试时才标记。
报告工作流(Gates) 按顺序执行,每道通过条件满足前不得推进。范围——通过:列出本次审查中检查的每个 .py 路径(或显式 glob)。误报筛查——通过:对计划报告的每个问题,检查上述有效模式与上下文相关规则;若这些部分说明不应标记,则丢弃或收窄该发现。证据——通过:每个剩余发现都包含 [FILE:LINE](或有界行范围);符号或简短逐字片段可补充位置锚点但不能替代它。验证协议——通过:加载 review-verification-protocol 并在面向用户的书面报告前完成其对每个报告问题的强制步骤。交付——通过:用户可见输出符合该协议要求的任何结构(不能只倾倒问题而跳过其检查)。
何时加载参考文档 审查代码格式/风格时加载 pep8-style.md;审查函数签名时加载 type-safety.md;审查 async def 函数时加载 async-patterns.md;审查 try/except 块时加载 error-handling.md;通用 Python 审查时加载 common-mistakes.md。
审查问题 代码是否遵循 PEP8 格式(缩进、行长、空白)?导入是否正确分组(标准库→第三方→本地)?命名是否遵循约定(snake_case、CamelCase、UPPER_CASE)?所有函数签名是否完整类型化?异步函数是否真正非阻塞?异常是否包含有意义的上下文?是否存在可变默认参数?报告前先完成上述 Gates(尤其是第 4 道)。