Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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: " +
        **fieldList = arcpy.ListFields(layer)**
        for field in fieldList:
            if == "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?


share|improve this question
up vote 5 down vote accepted

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)
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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