2 votos

Distinción entre capas y TableView con ArcPy

Trabajo con ArcMap y utilizo ArcPy.

Mi tarea es hacer un bucle a través de MXDs y encontrar fuentes de datos rotas.

Mi código es:

mxd = arcpy.mapping.MapDocument(fullPath)
brknMXD = arcpy.mapping.ListBrokenDataSources(mxd)
for brknItem in brknMXD:  
    if brknItem.supports("workspacePath"):
        try:
            source = brknItem.workspacePath
            print  str(brknItem) + ": " +  source
        except:
            print "unexpected error"
            continue
    else:
        print "Layer does not support source"

Algunos MXD tienen TableViews y ahí es donde se rompe el código.

Traceback (última llamada más reciente): Archivo " P:\Scripts\Find_MXDs_Broken_Sources.py ", línea 5, en if brknItem.supports("workspacePath"): AttributeError: 'TableView' object has no attribute 'supports'

He comprobado dentro de un intérprete de Python MXD para ver qué tipo de objetos son devueltos por arcpy.mapping.ListBrokenDataSources(mxd) y se indica:

>>> for each in brknMXD:
...     print type(each)
...     
<class 'arcpy._mapping.Layer'>
<class 'arcpy._mapping.Layer'>
<class 'arcpy._mapping.Layer'>
<class 'arcpy._mapping.TableView'>

Está claro que puedo establecer una prueba para distinguir entre estos dos tipos, pero no sé cómo escribirla exactamente.

¿Alguna idea?

0voto

UnkwnTech Puntos 21942

En comentado por @MichaelStimson :

Y http://resources.arcgis.com/en/help/main/10.2/index.html#//03q30000001w000000 y mira el dataType, debería ser Layer o T tipos indicados, aunque no estoy seguro de lo bien que funciona con roto objetos rotos... inténtalo a ver qué te sale: if arcpy.Describe(brknItem).dataType == 'Layer': before .supports(.. line.

y como comentado por @BenSNadler :

Puede utilizar listLayers y listTables y comprobar si cada uno está roto O como se indicó anteriormente, compruebe el tipo antes de .supports

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X