Suite

Débogage CalculateField_management ERREUR 000623 : Type de valeur non valide pour le champ de paramètre ?

Débogage CalculateField_management ERREUR 000623 : Type de valeur non valide pour le champ de paramètre ?


J'essaie de sélectionner des enregistrements dans ma table qui contiennent certains mots dans le champ "Nom", puis de les coder comme 0 (pas de pharmacie) ou 1 (pharmacie) Il s'agit simplement d'un test recherchant deux mots pour sélectionner des non-pharmacies.

Je reçois un :

ExecuteError : ERREUR 000622 : Échec de l'exécution (Calculer le champ). Les paramètres ne sont pas valides. ERREUR 000623 : Type de valeur non valide pour le champ de paramètre.

Je ne sais pas quelle variable est invalide. Des pensées? Je ne sais pas non plus si le champ Calculer fonctionnera uniquement sur les enregistrements sélectionnés. Je ne peux pas aller assez loin pour vérifier cela.

# import system modules import arcpy import random # définir l'environnement de l'espace de travail myWorkspace = arcpy.env.workspace = "C:/PharmacyProtocol/tables" arcpy.env.overwriteOutput = True # définir les variables out_table = "VT_TRL_DLC.dbf" # définir les variables de champ fieldList = arcpy.ListFields(out_table) for field in fieldList: if field.name == "Name": nameF = field elif field.name == "Pharmacie": pharmF = field #create liste de mots qui ne sont PAS des pharmacies noPharmWords = [ 'AMERICAN LEGION','BAR'] expression = 0 #trouver les mots dans le champ Nom, code Pharmacy comme "0" s'il n'est pas déjà codé pour codeWord dans noPharmWords : #create SQL text clause fldName = '"Name"' endClause = "% '" SQLstr = fldName + " LIKE '%" + codeWord + endClause #select records from table with codeWord cursor = arcpy.da.SearchCursor(out_table, ["Name"], SQLstr) arcpy.CalculateField_management(out_table, pharmF, expression) du curseur

Vous semblez abuser du curseur.arcpy.CalculateField_management()fonctionnera sur l'ensemble de la table ou de la vue de table qui lui est fournie, quelle que soit l'existence d'un objet curseur. C'est probablement un échec parce que tu passes un champ objet plutôt qu'un champ Nom à cela.

Essayez plutôt d'utiliser un curseur de mise à jour en remplaçant celui-ci :

#select records from table with codeWord cursor = arcpy.da.SearchCursor(out_table, ["Name"], SQLstr) arcpy.CalculateField_management(out_table, pharmF, expression) del curseur

avec ça:

#select records from table with codeWord with arcpy.da.UpdateCursor(out_table, ["Name","Pharmacy"], SQLstr) comme curseur : pour la ligne dans le curseur : ligne[1] = expression cursor.updateRow(ligne)

Si le champ est de type entier, vous pouvez essayer expression = int(0). Le champ Calculer fonctionnera uniquement sur les enregistrements sélectionnés ou sur tous les enregistrements si aucun n'est sélectionné. Calculer le champ 0 fonctionnera-t-il à partir de la table attributaire de ce champ ?

La seule autre option que je peux suggérer est de commenter la fonction CalcField et peut-être de faire autre chose qui prouve que le curseur fonctionne comme prévu.


Pour déterminer pourquoi vous recevez cette erreur, je vous recommande de remplacer :

arcpy.CalculateField_management(out_table, pharmF, expression)

avec:

print out_table print pharmF print expression arcpy.CalculateField_management(out_table, pharmF, expression)

Je soupçonne que vous ne fournissez pas à CalculateField_management les valeurs de paramètre que vous pensez être.


Voir la vidéo: Calculating Area of Polygons using ArcGIS