使用Python 2.6,我想将args
传递给类,但是我收到以下错误。
Traceback (most recent call last):
File "./myscript.py", line 95, in <module>
args = get_parser().parse_args()
File "./myscript.py", line 22, in get_parser
generate_mutex.set_defaults(func=ns_calls.generate_lbvs_bindings)
NameError: global name 'ns_calls' is not defined
主要剧本:
# myscript.py
from myclassfile import *
def get_parser():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest="subparser_name")
generate = subparsers.add_parser('generate')
generate_mutex = generate.add_mutually_exclusive_group(required=True)
generate_mutex.add_argument('-g', '--servicegroupname', help='The servicegroup name.',metavar='<servicegroup name>')
generate_mutex.add_argument('-l', '--lbvservername', help='The virtual erver name to which the service is bound.',metavar='<lbvserver name>')
generate_mutex.set_defaults(func=ns_calls.generate_lbvs_bindings)
if __name__ == "__main__":
args = get_parser().parse_args()
args.func(args)
ns_calls = NetscalerCalls(args)
我的模块文件:
# myclassfile.py
class NetscalerCalls(object):
def __init__(self, args):
self.lbvservername = args.lbvservername
self.servername = args.servername
答案 0 :(得分:3)
你没有把args放在这里:
ns_calls = NetscalerCalls()
^
根据您创建的课程,这是无效的,其中__init__
需要(self, args)
。
当您启动课程时,它会自动传入self
。所以你需要在启动课时传入args。
例如:
# myscript.py
from myclassfile import *
...
...
if __name__ == "__main__":
args = get_parser().parse_args()
args.func(args)
ns_calls = NetscalerCalls(args)
如果您在声明之前尝试传入args,则会失败
这就是为什么我已将ns_calls
的变量声明放在args
的声明下面
答案 1 :(得分:1)
您的 init 要求您传递一个args参数,但是当您执行第ns_calls = NetscalerCalls()
行时,您没有传递该参数,因此它会抱怨。获得所需的args对象后,您必须执行该行ns_calls = NetscalerCalls( args )