gpt4 book ai didi

python-3.x - argparse 没有返回 store_true 的期望值

转载 作者:行者123 更新时间:2023-12-01 12:07:03 28 4
gpt4 key购买 nike

我正在运行 Python 3.6.8::Anaconda 自定义(64 位)并从 argparse 得到奇怪的结果。尽管有 -x,trainandexecute=False 的值

def get_parameters():
startup = '-x -b'
sys.argv = startup.split(' ')
ap = argparse.ArgumentParser()
ap.add_argument('-x', '--trainandexecute', action='store_true')
ap.add_argument('-b', '--debug', action='store_true')
ap.add_argument('-d', '--rundate', action='store')
print(ap.parse_args())
return vars(ap.parse_args())
get_parameters()

这将返回以下输出。请注意,尽管有 -x 标志,但 trainandexecute=False。

Namespace(debug=True, execute=False, train=False, trainandexecute=False)
{'train': False,
'execute': False,
'trainandexecute': False,
'debug': True}

但是,此测试在下一个 Jupyter 单元中有效,并且它不是我的环境:

def get_test_parameters():
startup = '-b -x'
sys.argv = startup.split(' ')
print(sys.argv)
ap = argparse.ArgumentParser()
ap.add_argument('-x', '--x', action='store_true')
ap.add_argument('-b', '--debug', action='store_true')
print(ap.parse_args())
return vars(ap.parse_args())

所以输出:

get_test_parameters()

是:

['-b', '-x']                   # print(sys.argv)
Namespace(debug=False, x=True) # print(ap.parse_args())
{'x': True, 'debug': False} # return vars(ap.parse_args())

我很生气...

最佳答案

你的错误在这一行:

sys.argv = startup.split(' ')

sys.argv 中的第一个值被视为脚本的名称,而不是选项。尝试运行 ap.parse_args(startup.split()) - 你会看到正确的答案。

顺便说一下,不要将任何参数传递给 split()。如果你传递 "" 并且你有一个以上的连续空格,那么拆分的结果将是空字符串。

关于python-3.x - argparse 没有返回 store_true 的期望值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55602053/

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