所以我定义了一个在ArcGIS工具中使用的函数,该函数将验证属性,捕获错误并获取用户输入以纠正这些错误。我希望该工具可以选择并缩放到当前正在评估的细分,以便他们做出明智的决定。这是我一直在使用的,它运作良好。但CONVWGID是将要更改的变量,我不确定如何将该变量输入到SQL语句中而不会导致错误。
这就是我测试逻辑的方式:
def selectzoom():
arcpy.SelectLayerByAttribute_management(Convwks, "NEW_SELECTION", " [CONVWGID] = 10000001")
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
然后我需要将变量放到函数中以接受不同的CONVWGID值,这会给我一个我应该知道会发生的Runtime / TypeError。
运行时错误 - 回溯(最近调用最后一次): - 文件“string”,第1行,在模块中 - TypeError:无法连接'str'和'int'对象
def selectzoom(convwkgid):
delimfield = '" [CONVWGID] = ' + convwkgid + ' "'
arcpy.SelectLayerByAttribute_management(Convwks, "NEW_SELECTION", delimfield)
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
当我改变delimfield行以将整数更改为字符串时,它会选择整个要素类中的所有属性。不只是通过函数调用传递的那个。
delimfield = '"[CONVWGID] = ' + str(convwkgid) + '"'
我对SQL并不感到惊讶,也许我错过了这个语句的基本内容,但是当我基本上给它相同的信息时,我无法弄清楚为什么它不起作用:
"[CONVWGID] = 10000001"
'"[CONVWGID] = ' + str(convwkgid) + '"'
答案 0 :(得分:0)
事实证明,在我的单引号中额外包含Double引号会引发此问题。
感谢@Emil Brundage的帮助!
让我们说convwkgid = 10000001
'"[CONVWGID] = ' + str(convwkgid) + '"' doesn't equal "[CONVWGID] = 10000001"
'"[CONVWGID] = ' + str(convwkgid) + '"' would actually be '"CONVWGID] = 10000001"'
尝试改为:
'[CONVWGID] = ' + str(convwkgid)