2010-08-03 32 views
0

這是我與工作的代碼來自實際編程:process_file(sys.argv中[1])IndexError:列表索引超出範圍

import sys 

def process_file(filename): 
'''Open, read, and print a file.''' 

input_file = open(filename, "r") 
for line in input_file: 
    line = line.strip() 
    print line 
input_file.close() 
if __name__ == "__main__": 
    process_file(sys.argv[1]) 

導入後該模塊在IDLE,並通過文本文件參數通過process_file(),我收到此錯誤:

Traceback (most recent call last): 
    File "<pyshell#8>", line 1, in <module> 
    process_file("data.txt") 
    File "C:\Python26\read_file_2.py", line 14, in process_file 
    process_file(sys.argv[1]) 
IndexError: list index out of range 

我怎樣才能讓這個程序沒有收到這個錯誤的工作?任何幫助表示讚賞。

+0

它是'sys.argv [0]'還是'sys.argv [1]'?你不一致。 ;)如果是1,我猜測沒有參數傳遞。 – Bobby 2010-08-03 13:32:00

+0

首先請發佈導致錯誤的實際代碼 - 請注意,您的代碼中有'sys.argv [1]',但是回溯中有'sys.argv [0]'。其次,請確保您的縮進在您的發佈代碼中是正確的 - 在Python中,空格是重要的,這一點更爲重要。 – 2010-08-03 13:36:18

+0

我的不好,我已經嘗試將代碼更改爲sys.argv [0]並複製錯誤的錯誤消息。編輯出來。 – Timmay 2010-08-03 13:48:38

回答

0

它看起來像你有在同一縮進級別爲process_file定義的其餘部分

if __name__ == "__main__": 
    process_file(sys.argv[1]) 

塊,所以它正在運行,當你從另一個模塊調用process_file。我懷疑這可能會導致你的問題 - unindent它,所以if是符合def

+0

當我從命令行運行該程序時,這會消除錯誤,但對IDLE中的問題(我並不擔心)沒有做任何事情。 – Timmay 2010-08-03 14:07:24

+0

那麼什麼是IDLE中的問題呢?如果你已經退出,當你打電話時你不能打。 – Chowlett 2010-08-03 14:09:08

+0

當我通過process_file()傳遞.txt文件時,IDLE仍然給出列表索引超出範圍錯誤。 – Timmay 2010-08-03 14:44:10

0

你應該將

if __name__ == "__main__": 
    process_file(sys.argv[1]) 

process_file功能。當導入IDLE時,確保process_file可用,並將文件名傳遞給它。

相關問題