Select Page

How to Solve Python AttributeError: ‘_csv.reader’ object has no attribute ‘next’

by | Programming, Python, Tips

In Python 3, File object does not support the next() method. Instead, Python 3 has a built-in function next, which retrieves the next item from the iterator by invoking its __next__() method. If you try to call next() on a reader object in Python 3, you will raise the AttributeError: ‘_csv.reader’ object has no attribute ‘next.

To solve this error, use next(reader) instead.

This tutorial will go through the error in detail and how to solve it with code examples.


AttributeError: ‘_csv.reader’ object has no attribute ‘next’

AttributeError occurs in a Python program when we try to access an attribute (method or property) that does not exist for a particular object. The part of the error ‘_csv.reader’ object has no attribute ‘next‘ tells us that the reader object we are handling does not have the next method as an attribute. Python 3 no longer supports the next method.

Example

Let’s look at an example of opening a file using the csv module and reading the lines. First, we will look at the dataset:

pizza,price
margherita,£7.99
pepperoni,£8.99
four cheeses,£10.99
funghi,£8.99

Next, we will load the data into our program using the built-in open method, then create an iterator containing the lines in the file using csv.reader().

import csv

data = open('pizzas.csv', 'r')

reader = csv.reader(data)

The next step involves retrieving the items in the reader iterator using next(). We will call the next() method for times using a for loop.

for i in range(4):

   line = reader.next()

   print(line)

Let’s run the code to see the result:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Input In [3], in <cell line: 1>()
      1 for i in range(5):
----> 2     line = reader.next()
      3     print(line)

AttributeError: '_csv.reader' object has no attribute 'next'

We get the AttributeError because next() is no longer supported in Python 3.

Solution

We need to use the built-in next() method instead of calling next() on the reader object to solve this error. Let’s look at the revised code:

import csv

data = open('pizzas.csv', 'r')

reader = csv.reader(data)

header = next(reader)

for i in range(4):

   line = next(reader)

   print(line)

We get the header by calling next(reader) once. Then, we will only print the lines with values in the for loop. Let’s run the code to see the result.

['margherita', '£7.99']
['pepperoni', '£8.99']
['four cheeses', '£10.99']
['funghi', '£8.99']

We successfully printed the lines to the console. Note that using the next() invokes the __next__() method of the iterator. Therefore we can also call the __next__ method on the iterator, though this is not common. Let’s look at the code:

import csv

data = open('pizzas.csv', 'r')

reader = csv.reader(data)

header = reader.__next__()

for i in range(4):

   line = reader.__next__()

   print(line)
['margherita', '£7.99']
['pepperoni', '£8.99']
['four cheeses', '£10.99']
['funghi', '£8.99']

Summary

Congratulations on reading to the end of this tutorial! The AttributeError ‘_csv.reader’ object has no attribute ‘next’ occurs when you try to call the next() method on a csv.reader object in Python 3. To solve this error, you need to call the built-in next() method and pass the reader object to it as a parameter.
To learn more about Python for data science and machine learning, go to the online courses page on Python for the most comprehensive courses available.

Have fun and happy researching!

Research Scientist at Moogsoft | + posts

Suf is a research scientist at Moogsoft, specializing in Natural Language Processing and Complex Networks. Previously he was a Postdoctoral Research Fellow in Data Science working on adaptations of cutting-edge physics analysis techniques to data-intensive problems in industry. In another life, he was an experimental particle physicist working on the ATLAS Experiment of the Large Hadron Collider. His passion is to share his experience as an academic moving into industry while continuing to pursue research. Find out more about the creator of the Research Scientist Pod here and sign up to the mailing list here!