为何argparse拒绝参数并打印异常用法?Python脚本故障求助
解决argparse与unittest.main()冲突导致的参数解析异常问题
我之前写Python脚本时也踩过一模一样的坑!问题的根源其实是**unittest.main()和argparse的参数解析逻辑冲突**了。
先看你触发错误的代码片段:
testMode = args["test"] #... if (testMode): unittest.main()#this produced the error input("Press Enter to leave") exit()
为什么会出问题?因为unittest.main()默认会读取整个sys.argv列表来寻找测试用例。当你用-t参数运行脚本时,sys.argv里会包含['你的脚本名.py', '-t'],unittest会把-t当成一个测试用例的名称,找不到对应测试用例就会抛出异常,同时还会干扰argparse的正常解析流程,导致有时出现“拒绝接收参数并打印异常用法”的情况。
解决方案
只需要给unittest.main()指定argv参数,让它只关注脚本本身,忽略其他命令行参数就行:
import sys # 记得导入sys模块! testMode = args["test"] #... if (testMode): unittest.main(argv=[sys.argv[0]]) # 仅传递脚本名称给unittest input("Press Enter to leave") exit()
这样修改后,argparse可以正常处理所有你定义的参数(-e/-d/-p/-f/-t),而unittest也不会再去解析那些不属于它的参数,两者的逻辑就不会冲突了。
如果你的测试需要自定义参数,也可以在argv列表里添加,但要注意别和argparse的参数重名,避免再次出现冲突。
内容的提问来源于stack exchange,提问作者Coding
相关产品推荐
相关产品推荐

