有没有办法argparse.ArgumentParser在读取未知选项时不引发异常,而是将所有未知选项的值放在字典中,而将那些没有值放在列表中?
例如,假设解析器中没有定义参数prog.py,我传递了两个参数:
./prog.py --foo bar --baz
Run Code Online (Sandbox Code Playgroud)
我想要以下内容:
parsed = parser.parse_args()
vals = parsed.unknown_with_vals
novals = parsed.unknown_without_vals
print(vals)
#{'foo' : 'bar'}
print(novals)
#['baz']
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?
known, unknown_args = parser.parse_known_args(...)
Run Code Online (Sandbox Code Playgroud)
正如@ben w在评论中指出的那样,你如何解析unknown_args你,例如,使用以下语法:
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 "--">
Run Code Online (Sandbox Code Playgroud)
或者作为正则表达式:
(O V+ | O)* $
Run Code Online (Sandbox Code Playgroud)
注意:在这种情况下,禁止使用孤立值.
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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2485 次 |
| 最近记录: |