parser.parse_known_args()
和 parser.parse_args()
都是 Python 标准库中 argparse 模块提供的函数,用于解析命令行参数。它们的主要区别在于对未知参数的处理方式。
一、parser.parse_known_args()
函数
- 返回一个包含两个元素的元组
(namespace, remaining_args)
namespace
包含已知参数的命名空间remaining_args
是一个列表,包含未知的命令行参数- 通常用于在解析命令行参数时,容忍未知参数,而不会抛出错误
例如,
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--known_arg', type=int)
args, unknown = parser.parse_known_args(['--known_arg', '123', '--unknown_arg', '456'])
print(args.known_arg) # 输出:123
print(unknown) # 输出:['--unknown_arg', '456']
二、parser.parse_args()函数
- 返回一个包含已知参数的命名空间
- 如果命令行中包含未知参数,则会抛出
argparse.ArgumentError
- 通常用于在解析命令行参数时,只接受事先定义好的参数,不容忍未知参数
例如,
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--known_arg', type=int)
args = parser.parse_args(['--known_arg', '123']) # 正常执行
# 如果命令行包含未知参数,例如:parser.parse_args(['--known_arg', '123', '--unknown_arg', '456'])
# 则会抛出 argparse.ArgumentError
例如,
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--known_arg', type=int)
args = parser.parse_args(['--known_arg', '123', '--unknown_arg', '456'])
在这个例子中,parser.parse_args(['--known_arg', '123', '--unknown_arg', '456'])
会引发一个异常,因为 --unknown_arg
是未知的参数,而在 argparse
的默认行为下,未知参数会引发错误。
在实际使用中,选择使用哪个函数取决于对未知参数的处理策略
如果希望程序能够容忍并提取未知参数,可以使用 parser.parse_known_args()
希望严格要求所有参数都是已知的,可以使用 parser.parse_args()