Cookiecutter条件终止异常:选择no后无法停止执行
问题场景
- 在
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")
解决建议
- 使用非0退出码:CookieCutter将
sys.exit(0)视为脚本执行成功,不会终止流程。必须使用非0退出码(如sys.exit(1))才能触发终止。 - 确保导入sys模块:原代码未显式导入
sys,会导致NameError,需在脚本开头添加import sys。 - 避免捕获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
相关产品推荐
相关产品推荐

