gpt4 book ai didi

python - 如何根据另一个论点使一个论点成为必要的?

转载 作者:太空宇宙 更新时间:2023-11-03 20:57:59 25 4
gpt4 key购买 nike

给定一个小型解析器:

from argparse import ArgumentError, ArgumentParser
p = ArgumentParser()
p.add_argument('x', choices=['1', '2'])
p.add_argument('--y', required=False)
p.parse_args('1 --y 2'.split()) # this would work
p.parse_args('1'.split()) # this would work also

但是,我想确保如果 x=='1',则 --y 将获得一个值。我的实现是这样的:

args = p.parse_args('1 --y 2'.split())
if args.x=='1' and not args.y:
raise ArgumentError('blah')

有内部 argparse 方法可以做到这一点吗?当 argparse 抛出解析错误时看起来好多了

更好的是,我希望当 x=='1' 时需要 --y 参数,而当 x== 时不允许使用 --y 参数'2'

最佳答案

“我想确保如果 x == '1',则 --y 将获得一个值”

你可以使用这个:

from argparse import ArgumentParser
from sys import argv

p = ArgumentParser(prog='MyParser')

yIsRequired = (argv[1] == '1') # True if x == '1' else False

p.add_argument('x') # Positional argument
p.add_argument(
'--y', # Optional argument
required=yIsRequired,
)

p = p.parse_args()

都经过测试了。这段代码:

  • 检查 sys.argv 中的 x

  • **如果 x == '1'yIsRequired 设置为 True

  • yrequired 参数设置为 yIsRequired
  • 的值

更好的是,我希望当 x=='1' 时需要 --y 参数,而当 x=='2'' 时不允许使用 --y 参数

给你:

from argparse import ArgumentParser
import sys

p = ArgumentParser(prog='Demo')

yIsRequired = (sys.argv[1] == '1')

p.add_argument('x')
p.add_argument(
'--y',
required=yIsRequired,
)

if sys.argv[1] == '2' and '--y' in sys.argv: # If x == 2 and y has a value
sys.stderr.write('Demo: error: argument --y not allowed\n') # Write error to standard error output
sys.exit(1) # Exit with non-zero exit code

p = p.parse_args()

结论:

  • sys.argv 包含传递给脚本的所有参数(它是一个列表)
  • 您可以使用sys.argv检查参数是否已传递( bool 逻辑)
  • 参见this questionthis有关删除/禁用参数的帮助。答案有很多,但很多都值得一读。

关于python - 如何根据另一个论点使一个论点成为必要的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55891215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com