Python 列表索引超出了while循环的范围

Python 列表索引超出了while循环的范围,python,python-2.7,Python,Python 2.7,读取一列的n行后,表示列表索引超出范围。假设,我不知道行数,所以选择while循环。我可以在ExcelVBA中运行相同的程序,但这里有一些问题。 错误回溯 for file in files: book=xlrd.open_workbook(file) first_sheet = book.sheet_by_index(0) i=0 j=0 while first_sheet.cell(14+i,1+j).value != xlrd.empty_cell.

读取一列的n行后,表示列表索引超出范围。假设,我不知道行数,所以选择while循环。我可以在ExcelVBA中运行相同的程序,但这里有一些问题。 错误回溯

for file in files:
    book=xlrd.open_workbook(file)
    first_sheet = book.sheet_by_index(0)
    i=0
    j=0
    while first_sheet.cell(14+i,1+j).value != xlrd.empty_cell.value:
        while first_sheet.cell(14+i,1+j).value != xlrd.empty_cell.value:
            val=first_sheet.cell(14+i,1+j)
            print (val, i)
            i=i+1
        i=0
        j=j+1

如果您知道您遇到的异常,并且只是想忽略它,请尝试:except:这是解决方法

Traceback (most recent call last):
  File "C:\Users\User_2\Desktop\Vijay\FAST\KarBarge\Results py-spreadsheets.py", line 28, in <module>
    while first_sheet.cell(14+i,1+j).value != xlrd.empty_cell.value:
  File "C:\Python27\lib\site-packages\xlrd\sheet.py", line 399, in cell
    self._cell_types[rowx][colx],
IndexError: list index out of range

您获取列表索引超出范围的原因是,正如您所说,您试图访问电子表格中不存在的单元格。简单地测试它是否为空会导致这种情况

xlrd可以通过以下方式告诉您可用行数和列数:

i=0
j=0
try:
  while first_sheet.cell(14,1+j).value != xlrd.empty_cell.value:
    try:
      while first_sheet.cell(14+i,1+j).value != xlrd.empty_cell.value:
          val=first_sheet.cell(14+i,1+j)
          print (val, i)
          i=i+1
    except IndexError:
      # ignore error from iterating in i
      pass
except IndexError:
  # ignore error from iterating in j
  pass
else:
  i=0
  j=j+1
因此,您的循环需要保持在这些范围内

您的代码似乎试图按列显示电子表格的内容。作为替代方法,您可以尝试以下方法:

print(first_sheet.nrows, first_sheet.ncols)

这会将每一列打印为从第14行开始的值列表。

发布完整错误回溯为什么在第一张工作表上有while。cell14+i,1+j.value!=xlrd.empty_cell.value:两次?@MisterMiyagi:我有一个nxn值。我会浏览每一个专栏,每一篇文章rows@kvorobiev:回溯最后一次调用:文件C:\Users\User\u 2\Desktop\Vijay\FAST\KarBarge\Results\py-spreadsheets.py,第28行,在while first\u sheet.cell14+i,1+j.value!=xlrd.empty_cell.value:文件C:\Python27\lib\site packages\xlrd\sheet.py,第399行,在cell self中。_cell_types[rowx][colx],indexer:列表索引超出范围请按我写的方式找出错误。因为我可以用同样的基本方法成功地在excel vba中编写。?
import xlrd

workbook = xlrd.open_workbook(r"input.xlsx")
sheet = workbook.sheet_by_index(0)

for colx in range(1, sheet.ncols):
    print(sheet.col_values(colx, start_rowx=14))