【发布时间】:2022-01-02 11:15:23
【问题描述】:
我在脚本中的 argparse 解析器中添加了一些参数,如下所示:
parser = argparse.ArgumentParser()
parser.add_argument("--eval_model_dir", type=str, default='',
help="Model directory for evaluation.")
parser.add_argument("--evaluate_during_training", action='store_true',
help="Run evaluation during training at each save_steps.")
我正在从命令行运行脚本,如下所示:
python test.py --eval_ dummy_value
即使从命令行传递的参数--eval_ 与脚本中的参数--eval_model_dir 不匹配,传递的值dummy_value 也会分配给--eval_model_dir。如果命令行参数是--eval,我会收到如下错误消息:
error: ambiguous option: --eval could match --evaluate_during_training, --eval_model_dir.
根据我对Argparse official documentation 的阅读,我没有发现它提到命令行参数和脚本参数可能是最接近的匹配。直觉上,我认为需要完全匹配。我有以下问题:
- 这是否与 argparse 的最接近参数特征匹配?如果是这样,如果有人可以请我指向官方文档。
- 这种匹配的规则是什么?根据我所做的运行,从左到右读取命令行参数时,参数匹配只能适合脚本中的一个参数。不确定这是否正确或此匹配中有任何极端情况。
- 有没有办法阻止他最接近的匹配?
【问题讨论】:
-
旁注:
type=str不需要,因为这是默认设置 -
Ctrl-F "ambiguous" 在文档中,你的答案就是;)
-
默认是允许缩写,简单匹配。它不是试图做一个“最佳匹配”。在这种情况下,两个动作都匹配,所以它会抱怨。禁止缩写的功能是一个相对较新的功能(在 v 3.5 中,在 3.8 中进一步修正)。