My script runs perfectly for feature classes, but not shapefiles. It crashes at the point of selection, provided there is a query.

gp.Workspace = "C:/someworkspace"
fc = "featureclass.shp"
query = "[SOME_TEXT_FIELD] = \"666\""
gp.MakeFeatureLayer(fc, "flyr")
gp.SelectLayerByAttribute("flyr", "NEW_SELECTION", query)


ExecuteError: ERROR 000358: Invalid expression Failed to execute (SelectLayerByAttribute).

Tested a similar simple example in the Python Shell. This runs fine with a geodatabase and feature class. I assume there is some sort of special treatment for shapefiles I'm not aware of, but arcgis desktop help does not specify anything.

  • Try using single-quotes around the target value in your SQL query: query = "[SOME_TEXT_FIELD] = '666'" Dec 11, 2013 at 20:56
  • Did try that, both with and without escape characters. I don't think the query should behave any differently. I thought maybe I could create the feature layer without the file extension, but that doesn't work. My ArcMap has been behaving a little strangely (and slowly) at times since the connection for my ArcInfo license on the server has been a bit intermittent today, so I wondered if that that had anything to do with it.
    – Sleep6
    Dec 11, 2013 at 20:59
  • 1
    Ok, have you tried using quotation marks instead of brackets around the field? query = "\"SOME_TEXT_FIELD\" = '666'" Dec 11, 2013 at 21:04
  • More specific than that -- it works with query = "\"FIELD\" = \'121\'". I'll need an if statement for this I suppose. Thank you for the help.
    – Sleep6
    Dec 11, 2013 at 21:30

2 Answers 2


This, and only this, works - query = "\"FIELD\" = \'121\'". Let it be known that gp is much picker with shapefiles than feature classes when it comes to SQL query.


If you do not like using the escape character '' then this should work too:

query = '"FIELD" = ' + "'121'"

This ArcPy help page (that applies equally to arcgisscripting) mentions that:

The field delimiters used in a SQL expression differ depending on the format of the queried data. For instance, file geodatabases and shapefiles use double quotes (" "), personal geodatabases use square brackets ([ ]), and ArcSDE geodatabases don't use field delimiters

For a number of versions now I have been preferring to use the simpler syntax below:

query = "FIELD = '121'"
  • Yes, though I had difficulty finding that in 9.3. help for gp. I actually do prefer the escape character since it's slightly faster to run in python than using +.
    – Sleep6
    Dec 12, 2013 at 14:27

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