<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Remove broken links from a list in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/remove-broken-links-from-a-list/m-p/660401#M51315</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I create a list of feature in an MXD files, now I'd like to remove the features with broken links.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;What I did is create two list: &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1 features in MXD&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2 features in MXD with broken links&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Now I'd like to subtract...but ain't working.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is a code sample:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;##############################
# LIST ALL SHP IN MXD
list = []
df_list = arcpy.mapping.ListDataFrames (mxd)
for df in df_list: 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for fc in arcpy.mapping.ListLayers (mxd, "", df):
&amp;nbsp; if (fc.supports("DATASOURCE")) and (fc.dataSource.endswith(".shp")):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.append(fc)
print("List created")

#############################
# REMOVE BROKEN LINKS FROM LIST
brokenList = arcpy.mapping.ListBrokenDataSources(mxd)
for broken in brokenList:
&amp;nbsp;&amp;nbsp;&amp;nbsp; list.remove(broken)
&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("Broken data removed from list")&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 21 Aug 2012 15:35:43 GMT</pubDate>
    <dc:creator>LucaMoiana</dc:creator>
    <dc:date>2012-08-21T15:35:43Z</dc:date>
    <item>
      <title>Remove broken links from a list</title>
      <link>https://community.esri.com/t5/python-questions/remove-broken-links-from-a-list/m-p/660401#M51315</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I create a list of feature in an MXD files, now I'd like to remove the features with broken links.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;What I did is create two list: &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1 features in MXD&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2 features in MXD with broken links&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Now I'd like to subtract...but ain't working.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is a code sample:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;##############################
# LIST ALL SHP IN MXD
list = []
df_list = arcpy.mapping.ListDataFrames (mxd)
for df in df_list: 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for fc in arcpy.mapping.ListLayers (mxd, "", df):
&amp;nbsp; if (fc.supports("DATASOURCE")) and (fc.dataSource.endswith(".shp")):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.append(fc)
print("List created")

#############################
# REMOVE BROKEN LINKS FROM LIST
brokenList = arcpy.mapping.ListBrokenDataSources(mxd)
for broken in brokenList:
&amp;nbsp;&amp;nbsp;&amp;nbsp; list.remove(broken)
&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("Broken data removed from list")&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Aug 2012 15:35:43 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/remove-broken-links-from-a-list/m-p/660401#M51315</guid>
      <dc:creator>LucaMoiana</dc:creator>
      <dc:date>2012-08-21T15:35:43Z</dc:date>
    </item>
    <item>
      <title>Re: Remove broken links from a list</title>
      <link>https://community.esri.com/t5/python-questions/remove-broken-links-from-a-list/m-p/660402#M51316</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Are you trying to remove the &lt;/SPAN&gt;&lt;STRONG&gt;layer&lt;/STRONG&gt;&lt;SPAN&gt; from the mxd or simply the &lt;/SPAN&gt;&lt;STRONG&gt;layer in the list&lt;/STRONG&gt;&lt;SPAN&gt; from the python &lt;/SPAN&gt;&lt;STRONG&gt;list &lt;/STRONG&gt;&lt;SPAN&gt;?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If the first, I think you want to use RemoveLayer: &lt;/SPAN&gt;&lt;A href="http://resources.arcgis.com/en/help/main/10.1/index.html#/RemoveLayer/00s300000039000000/" rel="nofollow noopener noreferrer" target="_blank"&gt;http://resources.arcgis.com/en/help/main/10.1/index.html#/RemoveLayer/00s300000039000000/&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you simply want to modify lists built in Python, the ListBrokenDataSources returns an actual &lt;/SPAN&gt;&lt;STRONG&gt;layer&lt;/STRONG&gt;&lt;SPAN&gt;. So your code is trying to remove a "layer" from the list. In other words, because the ListLayers and FindBrokenDataSources command dont return exactly the same thing, you cant remove the layer in that way.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I think if you force NAMES into the list and work directly with those, it'll work. Is this applicable for your workflow, having a list of layer NAMES?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;##############################
# LIST ALL SHP IN MXD
list = []
df_list = arcpy.mapping.ListDataFrames (mxd)
for df in df_list: 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for fc in arcpy.mapping.ListLayers (mxd, "", df):
&amp;nbsp; if (fc.supports("DATASOURCE")) and (fc.dataSource.endswith(".shp")):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.append(fc.&lt;STRONG&gt;name&lt;/STRONG&gt;)
print("List created")

#############################
# REMOVE BROKEN LINKS FROM LIST
brokenList = arcpy.mapping.ListBrokenDataSources(mxd)
for broken in brokenList:
&amp;nbsp;&amp;nbsp;&amp;nbsp; list.remove(broken.&lt;STRONG&gt;name&lt;/STRONG&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("Broken data removed from list")&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 03:56:11 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/remove-broken-links-from-a-list/m-p/660402#M51316</guid>
      <dc:creator>KevinHibma</dc:creator>
      <dc:date>2021-12-12T03:56:11Z</dc:date>
    </item>
    <item>
      <title>Re: Remove broken links from a list</title>
      <link>https://community.esri.com/t5/python-questions/remove-broken-links-from-a-list/m-p/660403#M51317</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Are you trying to remove the &lt;STRONG&gt;layer&lt;/STRONG&gt; from the mxd or simply the &lt;STRONG&gt;layer in the list&lt;/STRONG&gt; from the python &lt;STRONG&gt;list &lt;/STRONG&gt;?&lt;BR /&gt;&lt;BR /&gt;If the first, I think you want to use RemoveLayer: &lt;A href="http://resources.arcgis.com/en/help/main/10.1/index.html#/RemoveLayer/00s300000039000000/" rel="nofollow noopener noreferrer" target="_blank"&gt;http://resources.arcgis.com/en/help/main/10.1/index.html#/RemoveLayer/00s300000039000000/&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;If you simply want to modify lists built in Python, the ListBrokenDataSources returns an actual &lt;STRONG&gt;layer&lt;/STRONG&gt;. So your code is trying to remove a "layer" from the list. In other words, because the ListLayers and FindBrokenDataSources command dont return exactly the same thing, you cant remove the layer in that way.&lt;BR /&gt;&lt;BR /&gt;I think if you force NAMES into the list and work directly with those, it'll work. Is this applicable for your workflow, having a list of layer NAMES?&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;##############################
# LIST ALL SHP IN MXD
list = []
df_list = arcpy.mapping.ListDataFrames (mxd)
for df in df_list: 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for fc in arcpy.mapping.ListLayers (mxd, "", df):
&amp;nbsp; if (fc.supports("DATASOURCE")) and (fc.dataSource.endswith(".shp")):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.append(fc.&lt;STRONG&gt;name&lt;/STRONG&gt;)
print("List created")

#############################
# REMOVE BROKEN LINKS FROM LIST
brokenList = arcpy.mapping.ListBrokenDataSources(mxd)
for broken in brokenList:
&amp;nbsp;&amp;nbsp;&amp;nbsp; list.remove(broken.&lt;STRONG&gt;name&lt;/STRONG&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("Broken data removed from list")&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt; Thanks for your kind reply.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm trying to remove the layer from the list, but I don't know how ( I am exploring set and so on but no luck).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Otherwise I could also remove the layer from the mxd since for my purpose I will create a new mxd.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is what I'm trying to do, move SHP to GDB.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;########################
# IMPORT MODULES
import sys, arcpy, datetime, os, traceback, time 
import arcpy.mapping
from arcpy import env

 
############################
# ADD NECESSARY TOOLBOXES
try:
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddToolbox("C:\\Program Files\\ArcGIS\\Desktop10.0\\ArcToolbox\\Toolboxes\\Data Management Tools.tbx");
except (RuntimeError):
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddToolbox("C:\\Program Files (x86)\\ArcGIS\\Desktop10.0\\ArcToolbox\\Toolboxes\\Data Management Tools.tbx")

 
##############################
# SET CURRENT AS MXD
mxd = arcpy.mapping.MapDocument ("CURRENT") 
 
##########################
# SET WORKSPACE
ws = 'C:\\PARK' 
arcpy.env.workspace = ws 
print("Workspace completed successfully") 
installdir = arcpy.GetInstallInfo("desktop")

#################
# CREATE A NEW FEATURE DATASET ON EXISTING GDB
gdb_full_path = 'E:\\PROGETTI\\PROGETTI_SICILIA\\007_SORGENTE_RIZZICONI\\007_SORGENTE_RIZZICONI.gdb'
mxd_date = time.gmtime(os.path.getctime(mxd.filePath))
mxd_name = os.path.basename(mxd.filePath)
fd_temp = '_' + time.strftime("%Y%m%d", mxd_date )+ '_' + (os.path.splitext(mxd_name)[0])
fd_name = arcpy.ValidateTableName(fd_temp)
fd_path = gdb_full_path + '\\' + fd_name
#&amp;nbsp;&amp;nbsp;&amp;nbsp; if arcpy.Exists (fd_path):
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddError ("FEATURE DATASET GIA' ESISTENTE!")
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("FEATURE DATASET GIA' ESISTENTE!")
fd = arcpy.CreateFeatureDataset_management(gdb_full_path, fd_name)


arp#################
# REPLACE DATASOURCE
new_path = 'I:\\20120208_Backup_disco_E\\'
mxd.findAndReplaceWorkspacePaths('E:\\', new_path)
 
##############################
# LIST ALL SHP IN MXD
list = []
df_list = arcpy.mapping.ListDataFrames (mxd)
for df in df_list: 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for fc in arcpy.mapping.ListLayers (mxd, "", df):
&amp;nbsp; if (fc.supports("DATASOURCE")) and (fc.dataSource.endswith(".shp")):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.append(fc)
print("List created")

#############################
# REMOVE BROKEN LINKS FROM LIST
#brokenList = arcpy.mapping.ListBrokenDataSources(mxd)
#for broken in brokenList:
#&amp;nbsp;&amp;nbsp;&amp;nbsp; list.remove(broken)
#&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("Broken data removed from list")

################
# MOVE SHP TO GDB
remove_list = []
for fc in list:
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fc_date = time.strftime("%Y%m%d", time.gmtime(os.path.getctime(fc.dataSource)))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; desc = arcpy.Describe(fc)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SR = desc.spatialReference
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #out_name = arcpy.ValidateTableName('_' + fc_date + '_' + fc.name + '_' + SR.name)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out_name = '_' + fc_date + '_' + fc.name + '_' + SR.name
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.FeatureClassToFeatureClass_conversion(fc, fd_path, out_name)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ('Created ' + out_name + ' to ' + gdb_full_path)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; replace_name = fd_path + '\\' + out_name
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fc.replaceDataSource (gdb_full_path, "FILEGDB_WORKSPACE", out_name)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; remove_list.append(out_name)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ('Replaced data source ' + out_name + ' in ' + gdb_full_path)
&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("SKIP")


# REMOVE NEW LAYERS FROM TOC
for layer in remove_list:
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.mapping.RemoveLayer(((df_list)[0]), layer)

# Refresh the Table of Contents to reflect the change
# CREATE A COPY OF THE EXISTING MXD

new_mxd = ws + '\\' + 'MXD' + '\\' +&amp;nbsp; time.strftime("%Y%m%d", mxd_date )+ '_' + (mxd_name)
arcpy.RefreshTOC()
mxd.saveACopy(new_mxd)&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 03:56:14 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/remove-broken-links-from-a-list/m-p/660403#M51317</guid>
      <dc:creator>LucaMoiana</dc:creator>
      <dc:date>2021-12-12T03:56:14Z</dc:date>
    </item>
    <item>
      <title>Re: Remove broken links from a list</title>
      <link>https://community.esri.com/t5/python-questions/remove-broken-links-from-a-list/m-p/660404#M51318</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;So what you want is a list of broken layers and a list of nonbroken layers? You already have the broken list figured out. To get the list of nonbroken just loop through the layers and check if it's broken or not.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;nonbrokenList = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for layerItem in layersList:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not layerItem.isBroken:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nonbrokenList.append(layerItem)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;you could even build the broken list at the same time rather than calling the listBrokenLayers.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;nonbrokenList = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;brokenList = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for layerItem in layersList:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if layerItem.isBroken:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; brokenList.append(layerItem)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nonbrokenList.append(layerItem)&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Aug 2012 18:47:46 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/remove-broken-links-from-a-list/m-p/660404#M51318</guid>
      <dc:creator>JustinShepard</dc:creator>
      <dc:date>2012-08-21T18:47:46Z</dc:date>
    </item>
    <item>
      <title>Re: Remove broken links from a list</title>
      <link>https://community.esri.com/t5/python-questions/remove-broken-links-from-a-list/m-p/660405#M51319</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt; So what you want is a list of broken layers and a list of nonbroken layers? You already have the broken list figured out. To get the list of nonbroken just loop through the layers and check if it's broken or not.&amp;nbsp; &lt;BR /&gt; &lt;BR /&gt;nonbrokenList = []&amp;nbsp; &lt;BR /&gt;for layerItem in layersList:&amp;nbsp; &lt;BR /&gt; if not layerItem.isBroken:&amp;nbsp; &lt;BR /&gt; nonbrokenList.append(layerItem)&amp;nbsp; &lt;BR /&gt; &lt;BR /&gt;you could even build the broken list at the same time rather than calling the listBrokenLayers.&amp;nbsp; &lt;BR /&gt;nonbrokenList = []&amp;nbsp; &lt;BR /&gt;brokenList = []&amp;nbsp; &lt;BR /&gt;for layerItem in layersList:&amp;nbsp; &lt;BR /&gt; if layerItem.isBroken:&amp;nbsp; &lt;BR /&gt; brokenList.append(layerItem)&amp;nbsp; &lt;BR /&gt; else:&amp;nbsp; &lt;BR /&gt; nonbrokenList.append(layerItem)&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi thank you for your help!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I picked the first solution so I don't have to add a passage to the code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is what I did&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;list = []
df_list = arcpy.mapping.ListDataFrames (mxd)
for df in df_list: 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for fc in arcpy.mapping.ListLayers (mxd, "", df):
&amp;nbsp; if (fc.supports("DATASOURCE")) and (fc.dataSource.endswith(".shp")):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not fc.isBroken:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.append(fc)
print("List created")&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Unfortunately I have this error:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN style="color:&amp;quot;#FF0000&amp;quot;;"&gt;Runtime error &amp;lt;type 'exceptions.AttributeError'&amp;gt;: 'Layer' object has no attribute 'isBroken'&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 03:56:17 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/remove-broken-links-from-a-list/m-p/660405#M51319</guid>
      <dc:creator>LucaMoiana</dc:creator>
      <dc:date>2021-12-12T03:56:17Z</dc:date>
    </item>
  </channel>
</rss>

