Skip to main content
 首页 » 编程设计

Python 参数解析 : how to make an argument required if and only if one flag is given

2025年05月04日55lori

我想知道如何在给出一个标志时使一个参数成为必需的,而在未给出该标志时如何使一个参数成为可选的?

import argparse 
 
 
parser = argparse.ArgumentParser() 
 
parser.add_argument('-c', '--convert', action = 'store_true') 
parser.add_argument('-l', '--lookup', action = 'store_true') 
parser.add_argument('name', type = str)  
 
args = parser.parse_args() 
 
if args.name: 
    print(args.name) 
if args.convert: 
    print ("convert now!") 

例如,在上面的代码中,我希望只有在给出-c 时才需要name。当我只用-l运行程序时,出现错误:

$ python3 test.py -l 
usage: test.py [-h] [-c] [-l] name 
test.py: error: the following arguments are required: name 

我尝试使用参数组将参数分为两组 1. -c 和 name; 2. -l,但它并没有真正起作用。

如有任何建议,我们将不胜感激!

请您参考如下方法:

这不是 argparse 可以自行执行的。您可以做的是将 name 定义为可选的,然后在解析后检查是否满足您的约束条件。

import argparse 
 
 
parser = argparse.ArgumentParser() 
 
parser.add_argument('-c', '--convert', action='store_true') 
parser.add_argument('-l', '--lookup', action='store_true') 
parser.add_argument('name', nargs='?')  
 
args = parser.parse_args() 
 
# If args.name must be a non-empty string when given, 
# you can use 'not args.name' in place of 'args.name is None' 
if args.convert and args.name is None: 
    parser.error("<name> required with --convert") 
 
if args.name: 
    print(args.name) 
if args.convert: 
    print ("convert now!")