(CSV) IndexError:Python 中的列表索引超出范围
(CSV) IndexError: list index out of range in Python
Python CSV“IndexError: list index out of range”发生在我们尝试访问索引超出范围的列表时,例如 CSV 文件中的空行。
要解决该错误,请在通过索引访问该行之前检查该行是否不为空,或者检查该索引是否存在于列表中。
下面是错误如何发生的示例。
假设我们有以下CSV
文件。
雇员.csv
first_name,last_name Alice,Smith Bob,Smith Carl,Smith
我们正在尝试按如下方式阅读它。
主程序
import csv with open('employees.csv', newline='', encoding='utf-8') as csvfile: csv_reader = csv.reader(csvfile, delimiter=',') for row in csv_reader: # ⛔️ IndexError: list index out of range print(row[0])
文件中的第二行
CSV
是空的,因此row
变量在第二次迭代时存储一个空列表。解决该错误的一种方法是在通过索引访问列表之前检查列表是否包含任何元素。
主程序
import csv with open('employees.csv', newline='', encoding='utf-8') as csvfile: csv_reader = csv.reader(csvfile, delimiter=',') for row in csv_reader: if row: # 👈️ check if row contains items print(row[0])
该if
语句在每次迭代中检查列表是否真实。
所有不真实的值都被认为是虚假的。Python 中的虚假值是:
- 定义为 falsy 的常量:
None
和False
. 0
任何数字类型的(零)- 空序列和集合:(
""
空字符串),()
(空元组),[]
(空列表),{}
(空字典),set()
(空集),range(0)
(空范围)。
请注意,空列表是假的,包含至少 1 项的列表是真值。
或者,您可以检查列表中是否存在您尝试访问的特定索引。
主程序
import csv with open('employees.csv', newline='', encoding='utf-8') as csvfile: csv_reader = csv.reader(csvfile, delimiter=',') idx = 1 for row in csv_reader: if len(row) > idx: print(row[idx])
len()函数返回对象的长度(项目数)。
该函数采用的参数可以是序列(字符串、元组、列表、范围或字节)或集合(字典、集合或冻结集合)。
如果列表的长度为
2
,那么它的最后一个索引是(因为索引是从零开始的)。 1
这意味着您可以检查列表的长度是否大于您尝试访问的索引。
或者,您可以使用try/except
块来处理错误。
主程序
import csv with open('employees.csv', newline='', encoding='utf-8') as csvfile: csv_reader = csv.reader(csvfile, delimiter=',') for row in csv_reader: try: print(row[1]) except IndexError: print('except block ran') continue
我们尝试在 index 访问当前迭代的列表1
,如果 an
IndexError
被引发,我们可以在except
块中处理它或继续下一次迭代。
结论
Python CSV“IndexError: list index out of range”发生在我们尝试访问索引超出范围的列表时,例如 CSV 文件中的空行。
要解决该错误,请在通过索引访问该行之前检查该行是否不为空,或者检查该索引是否存在于列表中。