我正在使用groovy来调用python类,我默认将None作为空参数,但是我发现很多问题也默认为None null或空字符串('')。
我希望argparse
中将有一些检查参数是否为'',然后将其更改为None,因此在代码中进一步不必检查None
,并且对于“,只需检查是否不是None
。
答案 0 :(得分:2)
ArgumentParser.add_argument()
的{{3}}参数是“允许执行任何必要的类型检查和类型转换”的函数。您可以滥用此内容:
import argparse
def nullable_string(val):
if not val:
return None
return val
parser = argparse.ArgumentParser()
parser.add_argument('--foo', type=nullable_string)
print(parser.parse_args(['--foo', ''])
输出:
Namespace(foo=None)
答案 1 :(得分:2)
将命令行参数指定为类型str
,默认值为None
,例如:
parser.add_argument('-j', '--jfile', default=None, type=str)
然后,如果用户完全省略了-j
,您将得到None
的回馈。但是,如果用户将-j
放在命令行中,但后面没有任何内容,则会收到错误 argument -j /-jfile:预期的一个参数,并且他们必须提供一个字符串超越这一点的价值。因此,您应该始终获取None
或非空字符串。
答案 2 :(得分:1)
我没有足够的声誉来发表评论,但是实现@JETM发布的nullable_string类型黑客的一种更简单的方法是:
def nullable_string(val):
return val or None
完整示例:
import argparse
def nullable_string(val):
return val or None
parser = argparse.ArgumentParser()
parser.add_argument('--foo', type=nullable_string)
print(parser.parse_args(['--foo', ''])