getting runtime error using arcpy

09-18-2017 01:58 PM
New Contributor

Hi all
I am trying to write a arcpy script that will turn off all NULL and empty fields. The script runs for a while and then gives a run time error at fields.append(row.getValue(f)). Below is the script.

import arcpy
from arcpy import env
arcpy.env.overwriteOutput = True
arcpy.env.addOutputsToMap = False
arcpy.env.workspace = "C:/temp"
out_layer = "temp.lyr"

mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, '*')[0] # need to find way to get list of layers there can be more than one data frame
listfields = []
thebadlist = []
for LayerNeedsFieldsTurnedOff in arcpy.mapping.ListLayers(mxd):
if LayerNeedsFieldsTurnedOff.isGroupLayer:
print "group print"
elif LayerNeedsFieldsTurnedOff.isFeatureLayer:
fields = dict((, []) for f in arcpy.ListFields(LayerNeedsFieldsTurnedOff) if not f.required)

rows = arcpy.SearchCursor(LayerNeedsFieldsTurnedOff,"","","","")
for row in rows:
for f in fields.keys():
fields.append(row.getValue(f)) #**the error happens here**
#print row.getValue(f)

for field, values in fields.iteritems():
#print field

if field == "Shape":
elif all(map(lambda s: s is None or not str(s).strip(), values)):

# LayerNeedsFieldsTurnedOff = arcpy.mapping.ListLayers(mxd, 'exampledata', df)[0]
# fill in your desired fields to remain visible

desiredFields = listfields

field_info = arcpy.Describe(LayerNeedsFieldsTurnedOff).fieldInfo # I need this for field count

for i in range(field_info.count):
if field_info.getfieldname(i) not in desiredFields:
if field_info.getfieldname(i) == "SHAPE":
field_info.setvisible(i, 'VISIBLE')
elif field_info.getfieldname(i) == "Shape":
field_info.setvisible(i, 'VISIBLE')
field_info.setvisible(i, 'HIDDEN')

arcpy.SaveToLayerFile_management(LayerNeedsFieldsTurnedOff, out_layer)
arcpy.MakeFeatureLayer_management(LayerNeedsFieldsTurnedOff, 'temp_layer', '', '', field_info)
refLyr = arcpy.mapping.Layer('temp_layer')
# rename the ref layer the same as your target layer =
lyrfile = "C:/temp/temp.lyr"
arcpy.ApplySymbologyFromLayer_management(refLyr, lyrfile)
arcpy.mapping.UpdateLayer(df, LayerNeedsFieldsTurnedOff, refLyr, False)
print 'cleaning up-'
if arcpy.Exists('temp_layer'):
print '\'temp_layer\' still in memory...deleting now...'
print 'deleting obj refs...'
del LayerNeedsFieldsTurnedOff, refLyr, fields
print 'done.'

0 Kudos
18 Replies
MVP Regular Contributor

Since the code is not properly indented, it is difficult to offer a suggestion.  Formatting your code when posting to Geonet will help: Code Formatting... the basics++

Also, can you include the error message text?

MVP Legendary Contributor

Dan could you format the code so that it is readable and syntax can be checked...

New Contributor

script code

0 Kudos
MVP Honored Contributor

What exactly is the error message?

0 Kudos
New Contributor

Runtime error

Traceback (most recent call last):

File "<string>", line 19, in <module>

File "c:\program files (x86)\arcgis\desktop10.3\arcpy\arcpy\arcobjects\", line 1100, in getValue

return convertArcObjectToPythonObject(self._arc_object.GetValue(*gp_fixargs(args)))

RuntimeError: ERROR 999999: Error executing function.

0 Kudos
MVP Legendary Contributor

guessing on the line numbers, but the line

fields = dict....

can you print the results after that line, because if it returns None, then the search cursor will fail

0 Kudos
New Contributor

It is down lower in the script  the following


0 Kudos
MVP Regular Contributor

Looks like the line Dan Patterson‌ is referring to is after the first "elif". Formatting the code for Geonet will provide line numbers and help the discussion.

0 Kudos
MVP Legendary Contributor

print statements would still help

0 Kudos