将main的args传递给类方法时出错

时间:2016-02-25 05:07:09

标签: python python-3.x

我实际上是Python的初学者(虽然我使用的是C和Java)。我得到了this python脚本,应该没问题。

def setup_clos_topo(fanout=2, cores=1):
    "Create and test a simple clos network"
    assert(fanout>0)
    # ...


def main(argv):
    parser = argparse.ArgumentParser(description="Parse input information for mininet Clos network")
    parser.add_argument('--num_of_core_switches', '-c', dest='cores', type=int, help='number of core switches')
    parser.add_argument('--fanout', '-f', dest='fanout', type=int, help='network fanout')
    args = parser.parse_args(argv)
    setLogLevel('info')
    setup_clos_topo(args.fanout, args.cores)


if __name__ == '__main__':
    main(sys.argv[1:])

运行脚本(即sudo ./clos_topo.py)时,出现此错误:

Traceback (most recent call last):
  File "./clos_topo.py", line 107, in <module>
    main(sys.argv[1:])
  File "./clos_topo.py", line 103, in main
    setup_clos_topo(args.fanout, args.cores)
  File "./clos_topo.py", line 85, in setup_clos_topo
    assert(fanout>0)
AssertionError

有人能说出这个错误发生的原因吗?谢谢

1 个答案:

答案 0 :(得分:1)

您的代码运行正常,没有错误。

由于您没有另行指定,fanout的默认值为None。由于您未在命令行中使用--fanout参数,None正在传递给setup_clos_topo,并且由于None不大于零,因此您获得断言失败。

如果您希望默认值不为零,则必须在定义参数时指定它:

parser.add_argument('--fanout', ..., default=2)

注意:如果函数中有默认参数(例如:def foo(x=2))并传入参数(例如:foo(x)),则传入的值将始终覆盖默认值。如果您传入的值不是None,则无关紧要,它将始终覆盖默认值。