You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cookiecutter条件终止异常:选择no后无法停止执行

CookieCutter pre_gen_project.py执行sys.exit(0)未终止的解决办法

问题场景

  • 在cookiecutter.json中配置了可选值为yes/no的test参数
  • 需求:用户选择yes时继续收集full_name输入;选择no时立即终止项目生成流程
  • 已在hooks/pre_gen_project.py中编写逻辑,但进入else分支执行sys.exit(0)后,CookieCutter仍未停止执行

现有配置与代码

cookiecutter.json内容:

{ "test" : [ "yes", "no"] }

hooks/pre_gen_project.py内容:

try:
    if "{{ cookiecutter.test }}" == "yes":
        cookiecutter.prompt.read_user_variable("full_name","your_synthetic_test_name")

    else:
       sys.exit(0)
except Exception as ex:
    print("Exception in pre_gen_project script")

解决建议

  1. 使用非0退出码:CookieCutter将sys.exit(0)视为脚本执行成功,不会终止流程。必须使用非0退出码(如sys.exit(1))才能触发终止。
  2. 确保导入sys模块:原代码未显式导入sys,会导致NameError,需在脚本开头添加import sys。
  3. 避免捕获SystemExit异常:sys.exit()会抛出SystemExit异常,原代码的try-except块会捕获该异常并仅打印错误信息,导致终止逻辑失效。需调整异常捕获范围,或移除不必要的try-except。

修正后的pre_gen_project.py代码

import sys
import cookiecutter.prompt

test_choice = "{{ cookiecutter.test }}"
if test_choice == "yes":
    cookiecutter.prompt.read_user_variable("full_name", "your_synthetic_test_name")
else:
    # 使用非0退出码触发CookieCutter终止
    sys.exit(1)

内容的提问来源于stack exchange,提问作者Pooja G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:33:15