我正在编写一个脚本,我使用getopt提取命令行参数,限定提供的值,然后将这些值用作循环的限制。代码片段如下:
try:
start_pod, end_pod, topo_value = map(int, args)
except ValueError, error_msg:
if 'invalid' in str(error_msg):
err_funct('Non-integer values supplied: {%s}' % args)
else:
err_funct(error_msg)
for pod in range(start_pod, end_pod):
print 'value of pod: %s' % pod
for switch in range(1,5):
print 'value of switch: %s' % switch
我遇到的问题是'范围'功能。我想我传递整数(map函数将字符串列表转换为整数)如果我不是我的try / except处理程序通过我写的错误函数退出,但由于某种原因这不起作用。
如果我使用正确数量的输入调用我的脚本,例如'some_script.py 1 1 5',脚本什么都不返回。
答案 0 :(得分:2)
您对脚本的调用不正确:
>>> range(1,1)
[]
(start_pod
和end_pod
都是1)。
range(i,j)
函数返回以下列表[i, i + 1, .., j - 1]
。或者,换句话说,总是删除终点。
尝试更改以下内容中的for pod in range...
行:
for pod in range(start_pod, end_pod + 1):
答案 1 :(得分:1)
请确保您粘贴自包含的示例。你的显然缺少一个关键部分 - args设置为什么?
如果我天真地假设您提供的示例直接映射到您的args并添加到顶部:
args = ['1', '1', '5']
然后它的行为就像你刚才说的那样 - 没有输出。
然而,这可能不是你想要的,因为那时start_pod和end_pod都是一样的。
如果我做了
args = ['1', '5', '1']
然后我得到输出。什么args使用给定的命令行到达您的代码(在该块之前的代码中打印repr(args))以及您对此有何期望?