I'm trying to delete a row from a coverage
I'm using arcpy 10.3.1
the code that i am using is (to be able to reproduce the issue)
import arcpy def count_row(data): i = 0 for row in data: i += 1 data.reset() return i arcpy.env.workspace = 'C:/Data/cea01apr' feature = 'point' fidfilter= 'fid = 1' featureClassList = arcpy.ListFeatureClasses() fieldList = arcpy.ListFields(feature) fieldString = [str(x.name) for x in fieldList] with arcpy.da.UpdateCursor(feature, fieldString, fidfilter) as cursorupdate: print('Number of rows:' + str(count_row(cursorupdate))) rowupdate = cursorupdate.next() print(rowupdate) rowupdate += 'h' cursorupdate.updateRow(rowupdate) with arcpy.da.SearchCursor(feature, fieldString, fidfilter) as cursorupdate: print('Number of rows:' + str(count_row(cursorupdate))) rowupdate = cursorupdate.next() if rowupdate: print(rowupdate) with arcpy.da.UpdateCursor(feature, fieldString, fidfilter) as cursorupdate1: print('Number of rows:' + str(count_row(cursorupdate1))) for row in cursorupdate1: cursorupdate1.deleteRow() raw_input('Press the <ENTER> key to exit')
the output of that script is
C:\Data>test.py Number of rows:1 hhhhhhhhhhhhhhhh Number of rows:1 hhhhhhhhhhhhhhhhh Number of rows:1 Traceback (most recent call last): File "C:\Data\test.py", line 39, in <module> cursorupdate1.deleteRow() SystemError: error return without exception set
I have tried this
arcpy.MakeTableView_management(feature, 'test') arcpy.SelectLayerByAttribute_management('test', 'NEW_SELECTION', fidfilter) arcpy.DeleteRows_management('test')
and i'm getting this error
Traceback (most recent call last): File "C:\Data\test.py", line 41, in <module> arcpy.DeleteRows_management('test') File "C:\***\cots\ArcGIS\Desktop10.3\ArcPy\arcpy\management.py", line 15352, in DeleteRows raise e arcgisscripting.ExecuteError: ERROR 999999: Error executing function. Failed to execute (DeleteRows).
trying the old arcpy.UpdateCursor
cursorupdate2 = arcpy.UpdateCursor(feature) #print('Number of rows:' + str(count_row(cursorupdate2))) row = cursorupdate2.next() print('delete') cursorupdate2.deleteRow(row)
will result into
C:\Data>test.py ArcInfo Number of rows:1 hhhhhhhhhhhhhhhhhhhh Number of rows:1 hhhhhhhhhhhhhhhhhhhhh delete Traceback (most recent call last): File "C:\Data\test.py", line 56, in <module> cursorupdate2.deleteRow(row) File "C:\***\cots\ArcGIS\Desktop10.3\ArcPy\arcpy\arcobjects\arcobjects.py", line 110, in deleteRow return convertArcObjectToPythonObject(self._arc_object.DeleteRow(*gp_fixargs(args))) RuntimeError: ERROR 999999: Error executing function.
uncommenting the line for the number of rows will actually crash python.exe
Your code is unreadable, you need to use Python syntax highlighting... follow the ... (3 dots), then select More, then
syntax highlighting, python, and paste your code inside and save.
You seem to have narrowed down the issue quite a bit, I recommend contacting Esri Support to see if this is a bug.
Beyond contacting Esri Support, working with coverages continues to get more and more tenuous with each version of ArcGIS for Desktop. Given that the ArcPy Data Access module was introduced back in ArcGIS 10.1, it could be the locking doesn't quite work with coverages because coverages would not have been a focus of the new cursors. Have you tried a similar workflow using the original cursors, the ones that pre-date the arcpy.da cursors?
If you try your exact same workflow on shapefiles and feature classes in a file geodatabase, does it work? If so, then it likely points to an issue with coverages. If not, then the problem lies somewhere in the code and how cursors are being handled.
My guess, it is a "coverage thing." Even if you contact Esri Support and they log a bug, I don't believe it will be addressed given the problem is with coverages. My advice is to migrate the data from coverages to feature classes in a file geodatabase.
Regarding shapefiles and geodatabases for testing, if you have a license to use ArcPy Data Access cursors, you have all of the tools available for creating shapefiles and feature classes to test them.
I did a quick test (converted one of my coverage into gdb) and i am able to delete a row.
I hope to make my delete work on the coverage since I need to do a clean_arc after deleting stuff
the clean_arc doesn't seem to work on a geodatabase file
Just to be a little picky about naming variables....
This is a list of field objects (not a straight list) :
fieldListarcpy ListFields feature
This is a list of strings (not a string) :
fieldStringstr x name x fieldList
I must agree with Joshua. Coverages, really.... Havn't met one of those for a very looong time.