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

使用docopts限制flag参数为指定枚举值不触发校验如何解决?

问题原因

你的写法中Usage块的枚举约束和Options块的声明存在冲突:当你在Options块里明确写了--myflag=MYVALUE时,docopts会将--myflag识别为接受任意字符串值的选项参数,此时Usage块里列的foo/bar/baz三个固定值不会被当作校验规则,所有传入的参数值都会被直接接收,不会触发非法值报错。

修复方案

要使用docopts原生能力实现枚举校验,只需删除Options块中--myflag的带参声明,完全依赖Usage块的枚举规则做匹配即可,正确代码如下:

eval "$(docopts -h - : "$@" <<DOCOPTS
My program: do some stuff

Usage:
  myprogram --myflag foo
  myprogram --myflag bar
  myprogram --myflag baz

Options:
  -m --myflag    This should only be foo, bar, or baz. 
DOCOPTS
)"

echo the value of myflag is: $myflag

效果验证

修改后执行myprogram --myflag dog时,docopts会匹配不到符合要求的Usage规则,直接输出用法提示并退出,不会继续执行后续代码,符合预期。


内容的提问来源于stack exchange,提问作者2rs2ts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:24:03