I can't see this documented in the Esri help files, so I'm entering it here for posterity. According to Jason Scheirer from the Esri ArcPy team this is the intended behaviour ([original Esri forums post](http://forums.arcgis.com/threads/108627)): > The `.next()` method raises an error by design: it follows to the letter [the Python Iterator Protocol](http://legacy.python.org/dev/peps/pep-0234/), which requires the `.next()` method on an object to raise a `StopIteration` exception when it is exhausted. The suggested approach is to use a `for` iterator on the cursor, ie without using the next() method at all: with arcpy.da.SearchCursor(fc, fields) as cursor: for row in cursor: In my case I wanted to perform an action when there was no row - I found that a Try, Except block worked well: with arcpy.da.SearchCursor(fc, fields, where) as cursor: try: row = cursor.next() print(row) except StopIteration: print("No rows") except: print("something else went wrong")