Suite

Le curseur arcpy n'accepte pas float (Inf)


J'ai une couche vectorielle dans laquelle j'ai ajouté des champs de type 'float' en utilisant arcpy.AddField_management. J'effectue des calculs simples entre ces champs à l'aide de curseurs de mise à jour, mais le problème est que lorsque je divise les valeurs par 0, j'obtiens une erreur d'exécution même si j'utilise Inf avec la fonction float.

C'est mon code :

avec arcpy.da.UpdateCursor('flurstcuke_cropped5', ['FID','totresgeb', 'totresgbpt','difresarea','scaledif']) comme curseur6 : pour la ligne6 dans le curseur6 : ligne6[3] = ligne6[2] - row6[1] try : row6[4] = ((row6[2] - row6[1])/row6[1]) * 100 sauf ZeroDivisionError : row6[4] = float('INF') cursor6.updateRow( [ligne6[0], ligne6[1], ligne6[2], ligne6[3], ligne6[4]])

Le message que je reçois est que 'le type de valeur est incompatible avec le type de champ. [échelledif].' Et je sais que cela fait référence à Inf puisque j'ai également mis en place un compteur dans mon script pour déterminer où se trouve le programme. Mais je ne comprends pas que puisque 'Inf' est un nombre flottant ici et que le type du champ est également flottant


float("Inf")n'est pas un vrai flotteur. Vous ne pouvez pas faire de maths normales avec. Les champs de classe d'entités ne peuvent stocker que des valeurs numériques réelles, dans des plages spécifiques. De l'aide :

Type de données | Gamme mémorisable ------------------------------------------------ --- Entier court | -32 768 à 32 767 Entier long | -2 147 483 648 à 2 147 483 647 Flotteur | Environ -3,4E38 à 1,2E38 Double | Environ -2,2E308 à 1,8E308

Si vous voulez la plus grande valeur possible, vous devriez pouvoirimporter le systèmeet utiliserow6[4] = sys.float_info.max(bien que ce soit la taille du plus grand double dans ArcGIS, pas le plus grand flotter; la distinction entre flottants et doubles est floue en Python).