Mehr

Wie teste ich mit dem eigenständigen Skript RemoveFeatureClassFromTopology auf 'if arcpy.exists'?

Wie teste ich mit dem eigenständigen Skript RemoveFeatureClassFromTopology auf 'if arcpy.exists'?


Ich habe einige Datasettopologien, die ich durchlaufen möchte, aber ich muss die Zuweisung von Feature-Classes testen, damit die Skripts nicht fehlschlagen. (Mit Win 7, ArcGIS 10.2, Python 2.7.5 und einer Datei-GDB)

Meine Recherchen haben nicht viel ergeben, aber mit 10.2 "Remove Feature Class From Topology (Data Management)" kann ich mit ArcCatalog einen vorhandenen FC aus dem Topo-Set entfernen. Wenn ich jedoch das Skript 'stand alone' ausführe und der FC derzeit nicht der Topologie zugewiesen ist, schlägt das Skript fehl. (Fehler, der unter dem Skript angezeigt wird)

Ich habe diesen Beitrag auch gelesen (ArcMap Feature-Class aus Feature-Dataset entfernen), aber ich möchte den fc nicht löschen, ich möchte ihn nur aus dem Topo entfernen, wenn er existiert, da ich ihn später wieder benötige.

Gehe ich den falschen Weg?

Mit ArcCatalog ist dies erfolgreich, wenn das fc vorhanden ist; topo = "C:/Data/Terrain_36/TOPO_EXPORT_2015_09_09_1_2.gdb/ZONES_1_2/TOPO_1_2" fc = "RL_10" arcpy.RemoveFeatureClassFromTopology_management(topo, fc) # Ausführen des Skripts unten als 'Stand alone', schlägt fehl, wenn der fc derzeit nicht zugewiesen ist; # import module import arcpy, sys, os, datetime, traceback, string, time from os import sep, listdir from arcpy import env as env # Dieser Skriptname script_name = os.path.basename(sys.argv[0]) # Create Dateipräfix für eindeutiges Dateinamenspräfix = datetime.datetime.now().strftime('%Y-%m-%d %H%M') # Dateisuffix erstellen, um zu vermeiden, dass Dateinamen mit Zahlen beginnen suffix = datetime.datetime.now ().strftime('%Y-%m-%d %H%M') # Variablen setzen Top_Dir = "C:/Data/Terrain_36" td = Top_Dir print "Top_Dir set to: '" +td+ "'" + '
' # Out_Dir = td+sep+ 'Exports' # print "Out_Dir set to: '" +Out_Dir+ "'" + '
' Log_Dir = td+sep+ 'zz_logs' print "Log_Dir set to: '" +Log_Dir+ "'" + '
' GDB_Nam = 'TOPO_EXPORT_2015_09_09_1_2.gdb' print "GDB_Nam set to: '" +GDB_Nam+ "'" + '
' GDB_Home = os.path.join(td, GDB_Nam) print "GDB_Home set to : '" +GDB_Home+ "'" + '
' # Setze die Arbeitsbereichsumgebung env.workspace = os.path.join(Top_Dir, GDB_Nam) ws = env.workspace print "Env.workspace set to: '" +ws+ " '" '
' zu po = "C:/Data/Terrain_36/TOPO_EXPORT_2015_09_09_1_2.gdb/ZONES_1_2/TOPO_1_2" fc = "RL_10" if arcpy.Exists (fc): arcpy.RemoveFeatureClassFromTopology_management(topo, fc) # Meine Fehlermeldungen Log: 2015-09-14 11:48:32.722000 Prozess starten: Topo_script.py Prozess gestartet am 14.09.2015 11:48:32.722000 PYTHON-FEHLER: Traceback-Info: Datei "C:DataTerrain_36Data_quality\_ScriptsTopo_script.py", Zeile 62 , im  arcpy.RemoveFeatureClassFromTopology_management(topo, fc) ArcPy-FEHLER: FEHLER 999999: Fehler beim Ausführen der Funktion. Kann nicht als versioniert in dieser Datenbank registriert werden. Kann nicht als versioniert in dieser Datenbank registriert werden. Fehler beim Ausführen (RemoveFeatureClassFromTopology).

Warum nicht verwenden?arcpy.Beschreibenauf der Topologie selbst und prüfen Sie, ob sich die Feature-Class in der FeatureClassNames Attribut?

Etwas Einfaches wie:

if fc in arcpy.Describe(topo).featureClassNames: arcpy.RemoveFeatureClassFromTopology_management(topo, fc) else: print "{0} war nicht in der Topologie… ".format(fc)