Python 我接受一切

Python 我接受一切,python,argparse,Python,Argparse,有没有办法让argparse.ArgumentParser在读取未知选项时不引发异常,而是将所有具有值的未知选项放在字典中,将没有值的选项放在列表中 例如,假设在解析器中没有为prog.py定义任何参数,我将传递两个参数: ./prog.py --foo bar --baz 我希望: parsed = parser.parse_args() vals = parsed.unknown_with_vals novals = parsed.unknown_without_vals print(v

有没有办法让argparse.ArgumentParser在读取未知选项时不引发异常,而是将所有具有值的未知选项放在字典中,将没有值的选项放在列表中

例如,假设在解析器中没有为
prog.py
定义任何参数,我将传递两个参数:

./prog.py --foo bar --baz
我希望:

parsed = parser.parse_args()
vals = parsed.unknown_with_vals
novals = parsed.unknown_without_vals

print(vals)
#{'foo' : 'bar'}
print(novals)
#['baz']
这能做到吗

known, unknown_args = parser.parse_known_args(...)
正如@ben w在评论中指出的,如何解析未知参数取决于您,例如,使用以下语法:

unknown_args = *(with_val / without_val) EOS
with_val = OPT 1*VALUE
without_val = OPT
OPT = <argument that starts with "--">
VALUE = <argument that doesn't start with "--">
注意:在这种情况下,禁止使用孤立值


如果这样调用,您希望它做什么
/prog.py--foo-bar-baz--qux
?字典应该是
{“foo”:[“bar”,“baz”]}
?这应该是一个错误吗?应该<代码> BAZ考虑一个位置参数吗?基本上,您需要一个全新的参数解析器:我认为一般来说,您最好使用argparse.rements`value for
nargs
将所有意外的内容累积到一个列表中,然后对其进行自己的处理:
(O V+ | O)* $
d = {}
for arg in unknown_args:
    if arg.startswith('--'): # O
        opt = arg
        d[opt] = []
    else: # V
        d[opt].append(arg) #NOTE: produces NameError if an orphan encountered

with_vals = {k: v for k, v in d.items() if v}
without_vals = [k for k, v in d.items() if not v]