指令
触发条件(When to use)
- •仅在编写或改写 Python 代码为数据处理流时使用。
- •输入包含:现有脚本、需求描述,或需要从零生成脚本,但明确要求双模式模块化。
能力范围(Must / Must Not)
- •必须生成一个可被
import调用且可通过 CLI 运行的 Python 模块。 - •必须提供一个
run()(或语义等价命名)函数,参数覆盖原脚本全部输入。 - •必须使用
argparse解析命令行参数,并在main()中调用run()。 - •必须保留
if __name__ == "__main__":,且仅在其中调用main()。 - •必须将硬编码路径与环境依赖参数化,不得写死路径。
- •不得在
run()中读取全局变量、环境变量或命令行状态。 - •不得在 import 时触发主流程执行。
- •不得假设未声明的外部资源、权限或运行环境。
结构与实现要求
- •
模块结构:
- •
run(...):纯函数式主流程,显式参数输入,返回结构化结果或状态码。 - •
build_parser()(可选):集中定义 CLI 参数,避免散落。 - •
main(argv=None):解析参数并调用run();argv可注入以便测试。
- •
- •
错误处理:
- •预期错误(参数缺失、文件不存在、格式错误)必须抛出可读异常或返回非 0 状态码。
- •不确定性(外部 I/O、第三方库行为)必须有失败策略(重试/降级/明确失败)。
- •
日志:
- •应当使用
logging,不得使用print作为主要日志。
- •应当使用
- •
可测试性:
- •
run()应当可被单元测试直接调用。
- •
失败策略与不确定性处理
- •参数校验失败:立即失败,给出最小可行动错误信息。
- •I/O 失败:明确失败原因;如允许重试,需显式声明次数与退避策略。
- •第三方依赖异常:捕获并封装为领域错误,避免泄露内部栈信息(调试模式除外)。
安全与合规
- •不得执行越权操作(如未声明的网络访问、系统修改)。
- •不得隐式调用外部命令或下载资源,除非明确声明并获得输入授权。
输出物
- •
生成的 Python 文件必须:
- •可被
import使用; - •可通过
python module.py --args运行; - •文档化参数与示例用法。
- •可被
示例骨架(非实现,仅结构)
python
import argparse
import logging
log = logging.getLogger(__name__)
def run(input_path: str, output_path: str, **kwargs):
"""Pure entry point."""
# ...
return 0
def build_parser():
p = argparse.ArgumentParser()
p.add_argument("--input-path", required=True)
p.add_argument("--output-path", required=True)
return p
def main(argv=None):
parser = build_parser()
args = parser.parse_args(argv)
return run(**vars(args))
if __name__ == "__main__":
raise SystemExit(main())