Deutsch

Error: TypeError: sequence size must match size of the row

Fehlermeldung

Beim Hinzufügen von Zeilen zu einer Feature-Class oder Tabelle mit der ArcPy-Funktion "InsertCursor" wird der folgende Fehler zurückgegeben:

Error:   
TypeError: sequence size must match size of the row.

Ursache

Die Ursache für diesen Fehler steht normalerweise mit Fehlern beim Feldabgleich oder mit Syntaxfehlern in Zusammenhang.

  • Fehler beim Feldabgleich

    Beim Einrichten der in die Feature-Class oder Tabelle einzufügenden Werte müssen die Felder mit den definierten Feldern im Cursor übereinstimmen. Dazu gehört, dass sie in der richtigen Reihenfolge festgelegt werden und dass die Feldtypen und -längen mit den einzufügenden Daten übereinstimmen.

    Im folgenden Beispiel stimmen die einzufügenden Zeilenwerte nicht richtig mit den InsertCursor-Feldern überein.

    # fc is a feature class
    fc = "C:/data/texas.gdb/counties"
    
    rowValues = [('Anderson',(-84.0, 35.0)),
    	    ('Andrews', (-85.0, 36.0))]
    
    cur = arcpy.da.InsertCursor(fc,("NAME", "ID", "SHAPE@XY"))
    
    for row in rowValues:
        cur.insertRow(row)
    
  • Python-Syntaxfehler

    Es gibt viele mögliche Syntaxfehler, aber dieser Fehler bezieht sich normalerweise darauf, wie die Datenliste eingerichtet ist.

    Im folgenden Beispiel sind die XY-Koordinaten in einem Tupel enthalten, das in der Liste nicht richtig formatiert ist, um die Geometrie zu erstellen.

    # fc is a feature class
    fc = "C:/data/texas.gdb/counties"
    
    rowValues = [((-84.0, 35.0)),
    	    ((-85.0, 36.0))]
    
    cur = arcpy.da.InsertCursor(fc,("SHAPE@XY"))
    
    for row in rowValues:
        cur.insertRow(row)
    

Lösung oder Problemumgehung

Stellen Sie sicher, dass die Zeilenwerte, die eingefügt werden, den InsertCursor-Feldern entsprechen und dass die Geometrielisten richtig formatiert sind.

Lösung für den Fehler beim Feldabgleich

Legen Sie nur die Felder fest, die für die Daten erforderlich sind, die eingefügt werden, wie im folgenden Beispiel dargestellt:

# fc is a feature class
fc = "C:/data/texas.gdb/counties"

rowValues = [('Anderson',(-84.0, 35.0)),
	    ('Andrews', (-85.0, 36.0))]

cur = arcpy.da.InsertCursor(fc,("NAME", "SHAPE@XY"))

for row in rowValues:
    cur.insertRow(row)
Lösung für den Syntaxfehler

Wenn das SHAPE@XY-Token verwendet wird, um einen einzelnen Punkt zu erstellen, ist ein Tupel mit einem einzelnen Wert erforderlich. Damit ein Tupel mit einem einzelnen Wert richtig erkannt wird, sollte es mit einem nachgestellten Komma geschrieben werden.

# fc is a feature class
fc = "C:/data/texas.gdb/counties"

rowValues = [((-84.0, 35.0),),
	    ((-85.0, 36.0),)]

cur = arcpy.da.InsertCursor(fc,("SHAPE@XY"))

for row in rowValues:
    cur.insertRow(row)

ODER

Durch die Unterteilung in SHAPE@X und SHAPE@Y kann ein Tupel mit einem einzelnen Wert vermieden werden.

# fc is a feature class
fc = "C:/data/texas.gdb/counties"

rowValues = [(-84.0, 35.0), (-85.0, 36.0))]

cur = arcpy.da.InsertCursor(fc,("SHAPE@X", "SHAPE@Y"))

for row in rowValues:
    cur.insertRow(row)

Referenzinformationen