AttributeError:'list'对象没有属性'updateItem'

时间:2014-01-12 09:46:56

标签: python arcpy

我正在使用arcpy进行地图自动化。

我需要根据添加到mxd的图层在地图布局上添加图例。我正在使用下面的代码(如教程中所示):

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd)[0]
lyrFile = arcpy.mapping.Layer(r"C:\Project\Data\Rivers.lyr")
arcpy.mapping.AddLayer(df, lyrFile, "TOP")
styleItem = arcpy.mapping.ListStyleItems("USER_STYLE", "Legend Items",                "NewDefaultLegendStyle")[0]
legend = arcpy.mapping.ListLayoutElements(mxd, "LEGEND_ELEMENT")[0]
legend.updateItem(lyrFile, styleItem)

但每次运行此代码时都会出现以下错误:

Runtime error 
   Traceback (most recent call last):
   File "<string>", line 1, in <module>
   AttributeError: 'list' object has no attribute 'updateItem'

什么可能导致出现此错误?

2 个答案:

答案 0 :(得分:0)

  

什么可能导致出现此错误?

嗯,我不熟悉arcpy,但似乎任何ListLayoutElements()返回的第0个元素都是一个确实没有updateItem()方法的列表。

您可能希望.append()到列表中,或者您可能希望拥有不同类型的对象。

答案 1 :(得分:0)

您的代码与ArcGIS帮助示例相同,   http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#//00s30000006z000000 我测试了示例代码并且运行正常。

顺便说一句,我想知道你是否粘贴了自己的代码。否则你可能会遇到第2,4,6行而不是最后一行的问题。

正如user2357112建议的那样,你最好再用干净的代码再试一次。
或者你可以在行之前通过 print type(legend)确认变量“legend”的类型 legend.updateItem(lyrFile, styleItem)