argparse错误:选项未被识别。

4

我有一个关于argparse的问题。

这是我的代码的一部分:

(...)
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-g', '--gfirst', dest="a", type=int, required=True)
    args = parser.parse_args()
    print args.a #Testing
    print args.a #Testing

if __name__ == '__main__':
    main()
    print "3"
    unittest.main(verbosity=2)
    print "4"

(...)

我试图将“a”设置为必需值以执行测试用例,因为我将来需要这个值。但是...
$ python regular_test.py --gfirst 2
2
2
3
option --gfirst not recognized
Usage: regular-test.py [options] [test] [...]

Options:
  -h, --help       Show this message
  -v, --verbose    Verbose output
  -q, --quiet      Minimal output
  -f, --failfast   Stop on first failure
  -c, --catch      Catch control-C and display results
  -b, --buffer     Buffer stdout and stderr during test runs

正如您所看到的,程序接受参数并将其打印出来,但是测试用例本身没有执行。 我插入了一些打印输出以显示正在执行什么以及未执行什么。

我做错了什么? 先行致谢。

附:我正在使用Python 2.7.3
附2:(在将argparse添加到程序之前)测试正常运行。


unittest.main是什么?它显然定义了一个不同的参数解析器,而不是regular_test.main中的那个。 - chepner
https://docs.python.org/2/library/unittest.html#basic-example 展示了调用unittest.main()的基本示例。我的代码框架就是这样的。 - almanegra
1
然后,在您未显示的“regular_test.py”部分中,有一个测试函数,它定义了一个不识别“--gfirst”参数的不同参数解析器,或者说unittest.main作为自己的解析器,也接受命令行参数,只是不接受“--gfirst”。 - chepner
2个回答

4

那可能就是问题所在了。我没有搜索unittest,因为我认为问题与argparse有关。谢谢大家。 - almanegra
@Miller,是的,甚至文档上都说:“unittest.main()是一个命令行程序,它从模块中加载一组测试并运行它们。” - alecxe

1
你的问题是单元测试器想要拥有任何命令行参数。这可能会使您自己的参数设置变得复杂。
从技术上讲,单元测试应该包含运行所需的所有内容,并且不应依赖于参数。您可以考虑将任何与环境相关的配置(例如DB主机名)移动到环境变量中。
这是我的意见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接