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 the following code. I want to see if a layer name exists within a map document, not if the shapefile exists in the directory. If I copy paste into the python window within ArcMap works fine. IE. Prints: True

If I run the program as a stand-alone script it does not work? Prints False when should print True I have code the sets up the mxd and dataframe.

if arcpy.Exists("project_aoa") == True:
elif arcpy.Exists("project_aoa") == False:

These layers are withing a group layer should this matter?

project_aoa is a shapefile.


I ended up doing this:

for item in mxds:
    mxd = arcpy.mapping.MapDocument(r"{0}".format(item))
    df=arcpy.mapping.ListDataFrames(mxd,"Project Area")[0]

    for lyr in arcpy.mapping.ListLayers(mxd, "project_aoa", df):
        if == "project_aoa":
            print ("False")
share|improve this question
@Roy Thanks for if / else correction. – Tristan Forward Jul 16 '12 at 21:33
up vote 5 down vote accepted

arcpy.Exists only works on datasets, so it will only return whether or not a file, feature class, dataset, or feature layer (among other items) exists. Layers in an mxd are not any of those things - they're a separate class, and they reference a dataset themselves.

SO, why does it work in the Python window, but not in the standalone script? Because in ArcMap, the TOC layers are ALSO feature layers of the same dataset (effectively - they have to be in order to be displayed). arcpy.Exists("project_aoa") returns true because in addition to being a map layer, there is ALSO a feature layer of that name for it to find. In a standalone script where you open an mxd, that same thing doesn't occur, so you need to iterate over the layers (unfortunately) to find it.

share|improve this answer

This code works for me:

mxd = arcpy.mapping.MapDocument(mxd_Path)

for lyr in arcpy.mapping.ListLayers(mxd):
    print lyr
    print arcpy.Exists(lyr.dataSource)   

for further info see this

share|improve this answer

I'm not sure you need to test equality here. The exists method should return true or false on it's own.

Try this:

if arcpy.Exists("project_aoa"):
    print "True"

Also, you can shorten the code a smidge by using an else statement instead of an elif -- just splitting hairs though.

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.