我正在测试一些argparse代码。我想要一个可选参数,它从一个选项列表中收集n
个输入。所以,我写道:
import argparse
modules = ["geo", "loc"]
parser = argparse.ArgumentParser()
parser.add_argument("--modules", nargs='*', choices=modules)
通过这个设置,我可以完全杀死翻译。
如果传递一组有效的参数,它可以正常工作:
>>> parser.parse_args("--module geo loc geo".split())
Namespace(modules=['geo', 'loc', 'geo'])
但是如果你传入一个未命中形成的参数,它会完全杀死python:
>>> parser.parse_args("--module geo metro".split())
usage: [-h] [--modules [{geo,loc} [{geo,loc} ...]]]
: error: argument --modules: invalid choice: 'metro' (choose from 'geo', 'loc')
PS C:\Users\myname\mycode>
我的问题是双重的:
请注意,我在Windows 7上使用Python2.7。
答案 0 :(得分:3)
是的,这是有意的,并记录在案:
在解析命令行时,parse_args()会检查各种错误,包括不明确的选项,无效的类型,无效的选项,错误的位置参数数等。当遇到这样的错误时,它会退出并输出错误以及用法消息:
这个想法是,如果用户提供了一个你不知道如何处理的无效选项或参数,最好的选择是放弃而不是猜测用户的实际意图。
如果你不介意,那就应该没事,对吧?除非您知道实现不同行为的理由,否则您的程序与所有平台上所有行为良好的命令行工具完全一致。
如果您确实想要实现不同的行为,请抓住SystemExit
可能引发的parse_args
例外。
(我能想到的唯一与我刚刚描述的方式不同的程序是版本控制工具Git,它试图猜测用户的意思并打印其猜测。但它仍会退出。)
答案 1 :(得分:1)
argparse
旨在用于从命令行运行Python脚本。这就是无效参数导致程序退出的原因。
这种行为几乎与所有shell(bash / sh / dos / etc.)实用程序一致。无效的命令行参数会导致程序退出并显示错误字符串和(可选)用法消息。