argparse 错误:无法识别选项
Posted
技术标签:
【中文标题】argparse 错误:无法识别选项【英文标题】:argparse error: Option not recognized 【发布时间】:2014-06-26 11:21:13 【问题描述】:我有一个关于 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
...如您所见,程序接受参数并打印它,但测试用例本身不执行。我插入了一些打印件来显示正在执行的内容和未执行的内容。
我做错了什么? 提前致谢
ps.:我使用的是 python 2.7.3 ps2.:测试运行正常(在程序中添加 argparse 之前。)
【问题讨论】:
什么是unittest.main
?它显然定义了一个与 regular_test.main
中的不同的参数解析器。
docs.python.org/2/library/unittest.html#basic-example 显示了调用 unittest.main() 的基本示例。我的代码骨架是这样的
然后在您未显示的regular_test.py
部分中的某处是一个测试函数,该函数定义了一个不同的参数解析器,该解析器无法识别--gfirst
参数,或者更确切地说unittest.main
为它自己的解析器也接受命令行参数,而不是--gfirst
。
【参考方案1】:
unittest.main()
本身 parses command-line arguments 并且它无法理解/识别您自定义定义的参数(请参阅 parseArgs()
类的 parseArgs()
方法)。
改为使用TextTestRunner
运行测试:
runner = unittest.TextTestRunner(verbosity=2)
result = runner.run(unittest.makeSuite(MyTestCase))
另见相关主题:
argparse and unittest python Call a python unittest from another script and export all the error messages【讨论】:
这可能是问题所在。我没有用谷歌搜索 unittest,因为我认为问题与 argparse 有关。谢谢大家。 @Miller 是的,即使是docs 也在说:unittest.main() is a command-line program that loads a set of tests from module and runs them.
【参考方案2】:
您的问题是单元测试人员想要拥有任何命令行参数。规定自己的论点可能会变得复杂。
从技术上讲,单元测试应该包含运行所需的一切,并且不应该依赖于参数。您可能会考虑将任何与环境相关的配置(例如数据库主机名)移动到环境变量中。
我的两分钱。
【讨论】:
以上是关于argparse 错误:无法识别选项的主要内容,如果未能解决你的问题,请参考以下文章
为啥直接调用 Python 脚本时 argparse 无法识别参数?
在 PyCharm 上导入 Kivy 时出现错误“[Core] 选项 --mode 无法识别”
将 postgresql 本地复制到远程数据库(都带有密码) - 错误:无法识别选项“区域设置”
Pip Requirements.txt --global-option 导致其他软件包安装错误。 “选项无法识别”
为啥 MSYS 无法识别 AM_INIT_AUTOMAKE 中的 tar-ustar 选项?
cc1:错误:在 mac 10.7.5 上安装 python-mysql 时无法识别命令行选项“-Wno-null-conversion”