将argparse上的空字符串替换为None

时间:2019-03-08 12:47:47

标签: python argparse

我正在使用groovy来调用python类,我默认将None作为空参数,但是我发现很多问题也默认为None null或空字符串('')。

我希望argparse中将有一些检查参数是否为'',然后将其更改为None,因此在代码中进一步不必检查None,并且对于“,只需检查是否不是None

3 个答案:

答案 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', ''])