Python 参数解析 : args has no attribute func

标签 python

简介

我是学校项目的麻烦。我正在制作一个测试服,我需要一个配置生成界面和一个测试运行器。为此,我使用了库 argparse 和两个子解析器 cgirun

问题本身

所以这是失败的代码部分:

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

好吧,我的错,我一直是个白痴,我没有重写我的运行脚本,所以我忘了输入 runcgi

感谢您阅读我的消息以及您 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/

相关文章:

python - 附加类作为方法

python - 在游戏循环中处理不同对象的优雅方式?

python - 正则表达式用于加号和减号以及字母?

python - 如何洗牌并将大列表拆分为较小的列表,以最大限度地提高速度?

python - PyQt5中的Segmentation fault (core dumped)错误

python - 打印带有 utf8 值的 python 字典

android - 我可以故意破坏 sqlite3 数据库进行测试吗?

python print 将字符串文字作为代码的一部分执行

python - Windows 上的 Pocketsphinx-python 安装错误

Python float 到字符串 : how to get '0.03' but '-.03'