gpt4 book ai didi

python - 在多个模块中添加参数时出现 argparse.ArgumentParser ArgumentError

转载 作者:行者123 更新时间:2023-12-01 09:17:35 25 4
gpt4 key购买 nike

我正在开发自动化测试框架(使用 pytest)来测试应用程序的多种风格。测试框架应该能够解析通用(所有风格)命令行参数和特定于风格的参数。代码如下所示:

父级.py:

import argparse
ARGS = None
PARSER = argparse.ArgumentParser()
PARSER.add_argument('--arg1', default='arg1', type=str, help='test arg1')
PARSER.add_argument('--arg2', default='arg2', type=str, help='test arg2')

def get_args():
global ARGS
if not ARGS:
ARGS = PARSER.parse_args()
return ARGS

MainScript.py:

import pytest
from parent import PARSER

ARGS = None
PARSER.conflict_handler = "resolve"
PARSER.add_argument('--arg3', default='arg3', type=str)


def get_args():
global ARGS
if not ARGS:
ARGS = PARSER.parse_args()
return ARGS

get_args()


def main():
pytest.main(['./Test_Cases.py', '-v'])

if __name__ == "__main__":
main()

测试用例.py

from MainScript import get_args

ARGS = get_args()


def test_case_one():
pass

执行 MainScript.py 失败并出现以下错误:

E ArgumentError:参数 --arg3:冲突的选项字符串:--arg3

最佳答案

所以问题是你已经声明了

PARSER.add_argument('--arg3', default='arg3', type=str)

MainScript.py内的全局范围内。这意味着每次导入该代码行时都会像在 Test_Cases.py 中一样执行,因此您会收到冲突错误,因为您将 arg 3 添加到 argparse 中两次。

最简单的解决方案是将 PARSER.add_argument('--arg3', default='arg3', type=str) 移动到 main() 函数中只会被调用一次。

def main():
PARSER.add_argument('--arg3', default='arg3', type=str)
pytest.main(['./Test_Cases.py', '-v'])

但是这样做会导致另一个问题,该问题源于 get_args() 的多重定义。当您在 main() 之前调用 get_args() 时,它只有 parent.py 中定义的两个参数,因此缺少 arg3。如果您将调用移至 main() 中,或者至少在调用 main() 后,它将起作用。

就我个人而言,我只是从 MainScript.py 中删除了 get_args() 的定义和调用,它工作得很好。

关于python - 在多个模块中添加参数时出现 argparse.ArgumentParser ArgumentError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51104674/

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