2017-04-17 356 views
0

我有一个python代码,它将文件名作为输入并解析报表中的数据,并在GUI窗口中给出输出。当我试图解析报告时,我得到索引超出范围错误。我知道这个错误是因为sys.argv [1]的参数。但我无法弄清楚为什么sys.argv [1]不能存储文件名。QApplication(sys.argv)给python的sys.argv [1]的索引超出范围

我已经卸载了所有的python模块,并且我已经卸载了抛出错误的解析器。

我也从环境变量和注册表中删除了python路径,然后重新安装了python和我的分析器软件。

我也删除了USERS \%USERNAME%\ AppData的

数据重新安装两者(python2.7.3和我的第三方软件)我也取得了注册表项HKEY_CLASSES_ROOT \应用程序\ python26变化之后。 exe \ shell \ open \ commandC:> ftype Python26.File =“C:\ Python26 \ python.exe”“%1”%* 即使我已经在环境变量下添加了python路径。

这在其他机器上工作正常,并且它在我的机器上工作正常,直到从我的机器上卸载python 3.xx(我同时拥有3.xx和2.7.3)的那一天。

我在得到错误FILE_NAME = FILE_PATH [0]这行 我不能够理解如果sys.arg [1]不存在,则它应该抛出错误在FILE_PATH = sys.argv中[1 :]这一行。但它如何能够存储字符串file_path列表大小只有1.

有人可以帮我解决这个问题。提前致谢。

if __name__ == "__main__": 
app = QtGui.QApplication(sys.argv) 
file_path = sys.argv[1:] 
open_window = TelematicsFileViewer() 
open_window.show() 
file_name = file_path[0] 
path = file_path[1] 
open_window.parsed_file_out(file_name, path) 
sys.exit(app.exec_()) 
+0

如果sys.argv长度为1,sys.argv [1:]不会引发错误,它将只返回一个空列表。 – flyingmeatball

回答

0

由于@flyingmeatball说,它会返回空列表[],当你引用空列表的第一个元素,然后将导致错误。

所以可以在脚本中添加一个尽可能高的检查以退出并显示错误代码1,以停止运行脚本的其余部分。

if len(sys.argv) < 4: # require file name and at least 2 args 
    print 'Include at least two arguments and retry.' 
    sys.exit(1)