简介
我是学校项目的麻烦。我正在制作一个测试服,我需要一个配置生成界面和一个测试运行器。为此,我使用了库 argparse
和两个子解析器 cgi
和 run
问题本身
所以这是失败的代码部分:
def CGI(args):
print("CGI: Work In Progress")
exit(0)
def runTest(args):
print("Run: Work in Progress")
exit(0)
parser = argparse.ArgumentParser()
subparser = parser.add_subparsers()
cgi = subparser.add_parser("cgi", help="CSV Generator Interface")
run = subparser.add_parser("run", help="Test running")
verbosity = parser.add_argument_group("Verbosity").add_mutually_exclusive_group()
check = run.add_argument_group("Checks")
# Arguments
#Run parser
run.set_defaults(func=runTest)
# Run argument declaration ...
# Verbosity argument declaration ...
# Check argument declaration ...
#CGI
cgi.set_defaults(func=CGI)
args = parser.parse_args()
args.func(args) # Error is here
每当我运行这段代码时,我都会遇到以下错误:
File "/home/thor/Projects/EPITA/TC/test/test.py", line 44, in main
args.func(args)
AttributeError: 'Namespace' object has no attribute 'func'
Python 版本
$ python -V
Python 3.6.4
Argparse 版本
$ pip show argparse
Name: argparse
Version: 1.4.0
Summary: Python command-line parsing library
Home-page: https://github.com/ThomasWaldmann/argparse/
Author: Thomas Waldmann
Author-email: tw@waldmann-edv.de
License: Python Software Foundation License
Location: /usr/lib/python3.6/site-packages
Requires:
编辑
如果我手动安装 argparse,它可以sudo pip install argparse
。但是有没有任何本地解决方案。我不确定它是否适用于学校的计算机(我们无法安装软件包)
编辑2
好吧,我的错,我一直是个白痴,我没有重写我的运行脚本,所以我忘了输入 run
或 cgi
感谢您阅读我的消息以及您 future 的帮助:)
最佳答案
这是 Python 3 版本的 argparse (https://bugs.python.org/issue16308) 中的一个已知错误。在 Python 2 中,如果调用脚本时没有任何参数(即没有子命令),它会干净地退出并显示“错误:参数太少”。然而,在 Python3 中,您会得到一个未处理的 AttributeError
。幸运的是,解决方法非常简单:
try:
func = args.func
except AttributeError:
parser.error("too few arguments")
func(args)
关于Python 参数解析 : args has no attribute func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48648036/