我正在尝试编写一个解析器类,该类派生自Python argparse ArgumentParser类。以下代码的轮廓在命令行上运行良好,但在我的模块上下文中生成一个我难以理解的错误。
代码(为了删除不重要的内容而简化了一些)如下:
class SansParser(argparse.ArgumentParser):
"""Argument parser for preparing a SansModel fit or calculation
"""
def __init__(self):
"""Initialisation method for the parser class"""
argparse.ArgumentParser.__init__(self)
# Subparsers for the two commands 'calc' and 'fit'
self.subparsers = self.add_subparsers()
self.fit_parser = self.subparsers.add_parser('fit', help="Fit a dataset")
self.fit_parser.add_argument('-d', '-data', '-dataset', type = str,
dest = 'dataset',
help = "The dataset to fit in SasXML format")
self.fit_parser.set_defaults(func=fit)
self.calc_parser = self.subparsers.add_parser('calc', prog='test')
self.calc_parser.set_defaults(func=calculate)
我可以将这个脚本等效地运行,没有问题。但是如果我从shell或者在python命令行中导入并尝试实例化这个类,就会出现以下错误:
$ python sansmodel.py
Traceback (most recent call last):
File "sansmodel.py", line 57, in <module>
parser = SansParser()
File "sansmodel.py", line 41, in __init__
self.fit_parser = self.subparsers.add_parser('fit', help="Fit a dataset")
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/argparse.py",
line 1064, in add_parser
parser = self._parser_class(**kwargs)
TypeError: __init__() got an unexpected keyword argument 'prog'
据我所知,argparse代码本身在第1064行明确创建了“prog”关键字,这是预期的行为,所以我对此感到困惑。我猜我在某种程度上搞错了作用域?