Python 最佳实践助手——代码规范、设计模式、性能优化、测试与类型注解。适用于编写或审查 Python 代码。
Python Sensei——最佳实践执行者.是一项面向实际任务的技能,主要用于Version: 1.1.0 QQ 作者:Shadows Company QQ 许可证:MIT.WHEN to TRIGGER.;WHEN 写新Python代码. 审查现有的Python代码.;
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
版本: 1.1.0 | 作者: Shadows Company | 许可证: MIT
需确保系统 PATH 中存在 python 或 python3,用于语法检查(python -m py_compile)和测试执行(python -m pytest)。
可选工具(自动检测,建议将据此动态调整):
pip install pytest)pip install ruff)该能力会检测用户环境中已安装的工具,并据此定制化推荐方案。
"""模块文档字符串 — 一行描述其用途。"""
# 标准库导入
import os
from pathlib import Path
# 第三方库导入
import httpx
from pydantic import BaseModel
# 本地导入
from .config import Settings
# 常量
MAX_RETRIES = 3
DEFAULT_TIMEOUT = 30
# 模块主体代码...
规则:
async def fetch_user(user_id: str, *, include_profile: bool = False) -> User | None:
"""根据 ID 获取用户。
Args:
user_id: 用户唯一标识符。
include_profile: 是否包含完整档案数据。
Returns:
若找到则返回 User 对象;否则返回 None。
Raises:
ConnectionError: 当 API 不可达时抛出。
"""
规则:
* 后的参数)Nonefrom dataclasses import dataclass, field
from enum import StrEnum
class Status(StrEnum):
ACTIVE = "active"
INACTIVE = "inactive"
PENDING = "pending"
@dataclass
class User:
id: str
name: str
status: Status = Status.ACTIVE
tags: list[str] = field(default_factory=list)
def to_dict(self) -> dict:
return {
"id": self.id,
"name": self.name,
"status": self.status.value,
"tags": self.tags,
}
规则:
@dataclass;验证逻辑繁重的模型优先选用 PydanticStrEnum(支持 JSON 序列化)to_dict() 方法以支持序列化frozen=True)# 推荐:捕获具体异常,try 块尽量精简
try:
response = await client.get(url)
response.raise_for_status()
except httpx.TimeoutException:
logger.warning("Request timed out: %s", url)
return None
except httpx.HTTPStatusError as e:
logger.error("HTTP %d: %s", e.response.status_code, url)
raise
# 禁止:捕获全部异常
try:
do_everything()
except Exception:
pass # 切勿如此操作
规则:
except:logging 模块,禁止使用 print()import asyncio
import httpx
async def fetch_all(urls: list[str]) -> list[dict]:
async with httpx.AsyncClient() as client:
tasks = [client.get(url) for url in urls]
responses = await asyncio.gather(*tasks, return_exceptions=True)
return [r.json() for r in responses if not isinstance(r, Exception)]
规则:
async withasyncio.gather()return_exceptions=Trueimport pytest
class TestUserService:
def test_create_user_with_valid_data(self):
user = create_user(name="Alice", email="alice@example.com")
assert user.name == "Alice"
assert user.status == Status.ACTIVE
def test_create_user_rejects_empty_name(self):
with pytest.raises(ValueError, match="name cannot be empty"):
create_user(name="", email="alice@example.com")
@pytest.mark.asyncio
async def test_fetch_user_returns_none_for_missing(self):
result = await fetch_user("nonexistent-id")
assert result is None
规则:
tests/test_{module}.pytest_[action]_[condition]_[expected]pytest.raisesproject/
src/
project_name/
__init__.py
main.py
config.py
models.py
tests/
test_main.py
test_models.py
pyproject.toml
requirements.txt
.gitignore
使用 pyproject.toml 替代 setup.py;requirements.txt 中固定主版本号。
| 反模式 | 修复方式 |
|---|---|
import * |
显式导入所需符号 |
| 可变默认参数 | field(default_factory=list) |
| 全局可变状态 | 依赖注入(Dependency injection) |
| 嵌套 try/except | 提取逻辑并展平结构 |
| 字符串拼接构造 SQL | 使用参数化查询(parameterized queries) |
type() 类型检查 |
改用 isinstance() |
os.path |
改用 pathlib.Path |
requests(同步) |
改用 httpx(原生支持异步) |
本能力仅读写工作目录内的 Python 源文件,不会访问项目范围以外的任何文件。
python -m py_compile 进行语法检查,python -m pytest 执行测试。这些命令运行的是本地项目代码 —— 仅应在可信仓库或沙箱环境中使用。venv)中运行,以隔离依赖。代码审查结果与生成的代码均严格遵循上述规范。每次审查均需指出具体反模式及其所在行号,并附上修正后的代码块。
tests/test_{module}.py,测试名称需具描述性pathlib.Path 替代 os.pathlogging 模块配合恰当日志级别进行调试输出发布方:Shadows Company — “We work in the shadows to serve the Light.”
相关专题
热门下载
相关下载
精品课程
共0课时 | 0人学习
共0课时 | 0人学习
共0课时 | 0人学习