2011-10-28 54 views
0

我正在編寫一個腳本,我使用getopt提取命令行參數,限定提供的值,然後將這些值用作循環的限制。代碼片段如下:Python內置的範圍函數和變量值

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

你的腳本呼叫不正確:

>>> 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

請確保您粘貼自包含的例子。你顯然缺少一個關鍵部分 - 參數是什麼?

如果我天真地假設的例子中你給的地圖直接發送到您指定參數和添加頂部:

args = ['1', '1', '5'] 

那麼它的行爲就像你剛纔說的 - 無輸出。

但是,這可能不是你想要的,因爲然後start_pod和end_pod是相同的。

相反,如果我做

args = ['1', '5', '1'] 

然後我得到的輸出。使用給定的命令行可以達到你的代碼的參數(在代碼塊之前在你的代碼中打印repr(args))以及你期望得到的輸出是什麼?