Python内置范围函数和变量值

时间:2011-10-28 07:50:39

标签: python loops range

我正在编写一个脚本,我使用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',脚本什么都不返回。

2 个答案:

答案 0 :(得分:2)

您对脚本的调用不正确:

>>> range(1,1)
[]

start_podend_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))以及您对此有何期望?