我实际上是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
有人能说出这个错误发生的原因吗?谢谢
答案 0 :(得分:1)
您的代码运行正常,没有错误。
由于您没有另行指定,fanout
的默认值为None
。由于您未在命令行中使用--fanout
参数,None
正在传递给setup_clos_topo
,并且由于None
不大于零,因此您获得断言失败。
如果您希望默认值不为零,则必须在定义参数时指定它:
parser.add_argument('--fanout', ..., default=2)
注意:如果函数中有默认参数(例如:def foo(x=2)
)并传入参数(例如:foo(x)
),则传入的值将始终覆盖默认值。如果您传入的值不是None
,则无关紧要,它将始终覆盖默认值。