I have a very simple python script that opens an mxd from a folder and then loops through each layer, and finds a ObjectID field and changes the alias name.

import arcpy
from arcpy import env

#Go into folder where mxd's are
env.workspace = r"D:\Temp\Test_Mxd"
#for each mxd
for mxd in arcpy.ListFiles("*.mxd"):
    print "Working on map document: " + mxd
    mapdoc = arcpy.mapping.MapDocument("D:\\Temp\\Test_Mxd\\" + mxd)
    #   for each dataframe
    df = arcpy.mapping.ListDataFrames(mapdoc,"Layers")[0]
    ##layers = arcpy.mapping.ListLayers(mapdoc,"*",df):
    layers = arcpy.mapping.ListLayers(mapdoc,"*",df)

    #   for each layer
    for layer in layers:
        print "Working on layer: " + layer.name
        **fieldList = arcpy.ListFields(layer)**
        for field in fieldList:
            if field.name == "OBJECTID":
        # Set the new alias name
                field.aliasName == "IGNORE::OBJECTID"
del mxd   

my problem is on the line fieldList = arcpy.ListFields(layer), I get a error in the interpreter (pythonwin) which says that the layer does not exist. Has anyone got any idea on where I am going wrong?

1 Answer 1


The documentation here says that ListFields takes a String parameter. So I would try with the datasource path, rather than a layer object itself. I.e. something like:

if layer.supports("DATASOURCE"):
    fieldList = arcpy.ListFields(layer.dataSource)
  • This only list fields from feature class but not all fields (related tables). In ArcMap, arcpy.ListFields method lists all the fields.
    – Surya
    Commented Apr 3, 2020 at 9:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.