【问题标题】:How do I avoid this error for this piece of code-TypeError: 'NoneType' object is not subscriptable如何避免这段代码出现此错误-TypeError: 'NoneType' object is not subscriptable
【发布时间】:2018-08-30 15:05:23
【问题描述】:
def open_csv():
    import csv
    with open('//Users//samuel//Desktop//L8 More File Processing (1)//students.csv', 'r') as f:
        reader = csv.reader(f)
        for row in reader:
            print(row)

print(open_csv()[1])

这是open_csv() 的输出:

['Name', 'Gender', 'Test 1', 'Test 2', 'Test 3', 'Test 4', 'Test 5', 'Test 6']
['Aisha', 'F', '0', '33', '67', '27', '12', '14']
['Alex', 'M', '12', '90', '34', '56', '93', '39']
['Bala', 'M', '13', '25', '58', '17', '49', '29']
['Denise', 'F', '13', '93', '84', '53', '65', '62']
['Farhan', 'M', '15', '5', '10', '62', '34', '11']
['Gopi', 'M', '21', '61', '39', '32', '91', '32']
['Irfan', 'M', '26', '36', '3', '95', '36', '39']
['Jun Ming', 'M', '29', '86', '77', '6', '91', '61']
['Lily', 'F', '30', '34', '46', '96', '100', '44']
['Mei Ling', 'F', '39', '58', '9', '61', '32', '46']
['Muthu', 'M', '39', '60', '13', '69', '55', '100']
['Nurul', 'F', '50', '35', '4', '27', '11', '97']
['Priya', 'F', '50', '25', '47', '15', '35', '86']
['Siti', 'F', '58', '71', '13', '19', '58', '30']
['Elisa', 'F', '59', '22', '73', '52', '77', '49']
['Dennis', 'M', '65', '94', '83', '67', '37', '22']
['Harry', 'M', '74', '75', '76', '82', '57', '1']
['Gary', 'M', '90', '12', '70', '86', '50', '59']
['Terry', 'M', '93', '84', '26', '99', '90', '72']
['Corinne', 'F', '100', '17', '88', '14', '33', '9']

当我运行此代码时,我得到 TypeError:"NoneType" object is not subscriptable。为什么会这样,我该如何解决?

【问题讨论】:

  • open_csv 没有 return 任何东西,那么您期望用 [1] 索引什么?

标签: python


【解决方案1】:

如果您想打印 CSV 文件中的第二行,您可以按如下方式修改您的函数:

def open_csv():
    import csv
    with open('//Users//samuel//Desktop//L8 More File Processing (1)//students.csv', 'r', newline='') as f:
        return list(csv.reader(f))

print(open_csv()[1])

这会将所有数据作为行列表返回,通过添加[1],您将显示第二行([0] 是第一行)。您收到错误的原因是您的代码在函数中没有 return 语句。 Python 默认返回None。所以实际上你的代码正在做:

print(None[0])

使用csv.reader() 时不要忘记添加newline=''

【讨论】:

    【解决方案2】:

    把这个函数变成一个生成器。

        def open_csv():
            ...
            for row in reader:
                print(row) // change this to yield(row)
    
        list(open_csv())[0]
    

    【讨论】:

      猜你喜欢
      • 2018-10-15
      • 2018-01-23
      • 1970-01-01
      • 2021-11-17
      • 2020-07-04
      • 2017-10-14
      • 2018-02-05
      • 2022-07-06
      • 2020-11-02
      相关资源
      最近更新 更多