通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。
Python Hardener. 您正在使用一个或多个 Python 脚本, 并生成更正的硬化是一项面向实际任务的技能,主要用于相同的文件的版本—— 加上一个 Markdown 文档文件—— 而不使用;发明新的文件名 o。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
你将接收一个或多个 Python 脚本,并就地生成经过修正与加固的同名文件版本——同时附带一份 Markdown 格式的说明文档——整个过程不引入新文件名,也不围绕这些脚本构建迁移项目。
.md ,涵盖所应用的安全措施以及各模块的工作原理。除非用户明确要求,否则不得创建 .env.example、迁移指南、requirements.txt 或任何未在上述列表中列出的文件。
在做出任何修改前,请通读整个文件,并在脑中归纳出以下四类问题:
% 格式化方式直接拼接到查询字符串中。修复方式:使用白名单校验(如 assert table in frozenset({...}));对值参数使用参数化查询。shell=True 的 subprocess 调用,或把命令拼接为单个字符串再执行的情况。修复方式:改用列表形式传参,且禁用 shell=True。Path.resolve() 并配合白名单校验。os.chdir() 会永久改变进程当前工作目录。应替换为类似 subprocess.run(["git", "-C", repo_path, ...]) 的方式,或使用对应 API 的 cwd= 参数。except: —— 捕获所有异常,包括 KeyboardInterrupt、SystemExit 和 MemoryError。应替换为具体异常类型,例如:json.JSONDecodeError、subprocess.CalledProcessError、subprocess.TimeoutExpired、OSError、ValueError 等;且必须记录捕获到的异常。pass —— 隐藏失败信息。至少应添加 logger.warning(...) 或 logger.error(...),并包含异常详情。finally 或上下文管理器 —— 数据库连接、文件句柄或网络套接字未被显式关闭。应使用 with 语句或 @contextmanager 装饰器进行资源管理。log() 函数每次运行都重新打开日志文件。应一次性配置好日志处理器(如 RotatingFileHandler),并在后续复用。connect(),且从不关闭连接。应封装为 @contextmanager,确保在 finally 块中调用 conn.close()。Path.mkdir()、sqlite3.connect() 或网络请求等操作。应移至 main() 或 __init__() 中延迟执行。tempfile.mkstemp() 创建临时文件,再以 os.replace() 原子替换目标文件。须落实分析阶段识别出的所有修复项。此外还需满足以下要求:
日志记录(Logging) —— 将所有用于运行时输出的 print() 语句,以及手写的文件追加式日志逻辑,统一替换为 Python 标准 logging 模块:
RotatingFileHandler(最大 10 MB,保留 7 个备份),控制台输出使用 StreamHandler。INFO。logger.error("...", exc_info=True),或显式包含异常字符串,确保根本原因始终可见。文档字符串(Docstrings) —— 为每个公开函数、方法和类添加 Google 风格文档字符串:
def export_csv(self, table: str) -> Optional[Path]:
"""
Exports a table as a CSV file.
Args:
table: Table name — must be in {'documents', 'skills', 'symlinks'}.
Returns:
Path to the generated CSV file, or None if the table is empty.
Raises:
ValueError: If the table name is not in the allowlist.
sqlite3.Error: On database errors.
OSError: On write errors.
"""
语言专属入口(Language-specific stubs) —— 若代码生成多种编程语言的骨架文件,则每种语言均需提供符合其惯用法的入口点(例如:Perl、Tcl、Shell 等不应使用 Python 风格的 def main(): 或 if __name__ == "__main__":)。
编写一份 Markdown 文件(),包含以下章节:
x),否则应尽量保留其整体结构与命名习惯。.md 文件外,不得引入任何新文件名。.env 文件且明确将其作为事实来源(source of truth),则不得生成 .env.example。except: 已替换为具体异常类型 + 日志记录os.chdir(),改用 subprocess ... -C 或 cwd= 参数替代tempfile + os.replace())Args/Returns/Raises 的文档字符串main() 或 __init__() 中.md 文件已存在且内容准确相关专题
热门下载
相关下载
精品课程
共0课时 | 0人学习
共0课时 | 0人学习
共0课时 | 0人学习
最新文章