我有一个argparsing程序:
导入argparse
def main():
p = argparse.ArgumentParser()
help_str = {'rule': 'Blah blah blah and stuff.'}
p.add_argument('-r', '--rule', action="store", type=str, dest='rule', help=help_str['rule'])
p.set_defaults(rule='string')
args = p.parse_args()
因此,我的命令行输入:
^{pr2}$我在想办法输入:
username@compname:~$python progname.py -r/--rule
我自己的错误信息出现了:
print '\n Error: no input value for rule:'
print ' resetting rule to default value.'
args.rule = 'string'
“应该在这个字符串后面打印”
对不起,我对Python只稍微有点流利。我试过使用try/except块甚至系统argv[2] (虽然我可能做错了什么。)这是我所有解决方案中不断出现的错误(对类型和值之外的错误不太熟悉):
progname.py: error: argument -r/--rule: expected one argument
感谢任何帮助。在
with}。对于}。在
nargs='?'
如果没有参数调用,则生成{-r
,args是Namespace(rule=None)
。和Namespace(rule='something')
和{让我们添加几行代码
^{pr2}$现在带有'-r'(或
rule
)的输出是:其他情况相同。在
{{cd8>在默认情况下,{cd10>也会生成
可以使用自定义
type
或action
添加自定义错误检查,但我认为在使用argparse
之后对None
进行测试更简单,也更容易理解。在我建议把这个
error message
改成warning
。错误通常会终止程序;警告会打印消息并继续。在这里有一个解决方案,当
nargs=2
(或其他已修复的问题)。这不是一个小的变化,因为它涉及到重新定义error
方法(在argparse
文档的末尾有文档记录),然后捕获它产生的错误。error
方法无法访问命名空间(args),也无法继续parse_args
。因此,如果rule
参数有问题,它就不能处理任何其他参数。在请记住,
nargs
有两个目的: -如果给定的参数字符串数目错误,则引发错误 -在多个操作之间分配多个参数字符串(由add_argument
创建的东西)。在第二种情况尤其明显,例如,如果你有几个位置,分别取1、2和*参数。对于Python语法分析器来说,它至少是一个新颖的功能。虽然可以调整它,但很难完全重新定义它。在
如果参数允许,可以使用
nargs='*'
来代替“?”,并在字符串数不是“2”(或其他值)时发出警告。在相关问题 更多 >
编程相关推荐