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

Joa*_*rez 8 python argparse

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

我希望有一些东西argparse可以检查参数是否为 '' 并将其更改为 None 在这种情况下,因此在代码中我不必再检查None'' 只需检查 if is not None

小智 9

类型参数ArgumentParser.add_argument()是一个“允许执行任何必要的类型检查和类型转换”的函数。你可以滥用这个:

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', ''])
Run Code Online (Sandbox Code Playgroud)

输出:

Namespace(foo=None)
Run Code Online (Sandbox Code Playgroud)


Boa*_*les 7

将命令行参数指定为具有strdefault类型None,例如:

parser.add_argument('-j', '--jfile', default=None, type=str)
Run Code Online (Sandbox Code Playgroud)

然后,如果用户-j完全省略,那么您将返回None。但是,如果用户输入-j命令行后没有任何内容,他们将收到错误参数 -j/--jfile: Expected one argument,并且他们必须提供一个字符串值才能通过此参数。所以你应该总是得到一个None或一个非空字符串。

  • 在这种情况下,显式提供空字符串(即“-j ''”)仍会将“jfile”参数设置为空字符串。 (6认同)