📜  python argparse 忽略无法识别的参数 - Python (1)

📅  最后修改于: 2023-12-03 15:33:58.167000             🧑  作者: Mango

Python argparse 忽略无法识别的参数

argparse 是 Python 中用于解析命令行参数和选项的标准模块。它具有许多功能,包括处理必需参数、选项、位置参数和子命令。但是,当解析器与未知参数或选项一起使用时,它可能会引发错误并退出程序。那么如何使 argparse 忽略未知参数呢?

使用 allow_abbrev 参数

在 argparse 中,allow_abbrev 参数控制当模糊匹配时是否允许缩写选项。如果我们将 allow_abbrev 设置为 True,模糊匹配时 argparse 将接受缩写选项:

import argparse

parser = argparse.ArgumentParser(allow_abbrev=True)
parser.add_argument('--verbose')
args = parser.parse_args(['-v'])
print(args)

在上面的代码中,我们添加了一个 --verbose 选项,并将 allow_abbrev 设置为 True。当我们运行代码时,我们只提供了一个 -v 参数,这是 --verbose 的缩写。因为 allow_abbrev 为 True,所以 argparse 不会引发错误并将其解释为 --verbose 选项。

使用 parse_known_args 函数

如果我们希望忽略 argparse 无法识别的参数,但还想保留解析的参数,可以使用 argparse 的 parse_known_args 函数。这个函数与 parse_args 函数类似,但它将返回一个元组,包含两个列表,第一个是解析的参数,第二个是未知的参数。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--verbose')
args, unknown = parser.parse_known_args(['--verbose', 'true', '--foo', 'bar'])
print(args)
print(unknown)

在这个例子中,我们添加了一个 --verbose 选项,然后通过 parse_known_args 函数解析传递的参数。当我们解析参数时,我们传递了一些未知的参数(--foo和bar)。这些未知参数将被 parse_known_args 函数捕获并存储在第二个列表中。

使用 ArgumentParser 对象的 error 方法

如果我们希望在遇到未知参数时抛出异常,但仍然想获得解析的参数,可以使用 ArgumentParser 对象的 error 方法。这个方法可以让我们在解析器遇到错误时手动引发异常。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--verbose')
args, unknown = parser.parse_known_args(['--verbose', 'true', '--foo', 'bar'])
if unknown:
    parser.error('Unknown arguments: {}'.format(' '.join(unknown)))
print(args)

在这个例子中,我们使用 parse_known_args 函数解析传递的参数,然后检查未知的参数列表是否非空。如果存在未知参数,则调用 parser.error 方法引发异常,并在异常消息中记录未知参数。如果未知参数列表为空,则打印解析的参数。

结论

在本文中,我们介绍了三种方法来使 argparse 忽略未知的参数或选项。如果我们想要保留解析的参数,并且允许未知的选项,则可以使用 allow_abbrev 参数。如果我们不想使用未知参数,并且只想使用 parse_args 函数,则可以使用 parse_known_args 函数并检查返回的未知参数列表。如果我们想要在遇到未知参数时引发异常,则可以使用 ArgumentParser 对象的 error 方法。