Mais

Cursor arcpy não aceita float (Inf)

Cursor arcpy não aceita float (Inf)


Eu tenho uma camada vetorial na qual adicionei alguns campos do tipo 'float' usando arcpy.AddField_management. Estou realizando cálculos simples entre esses campos usando cursores de atualização, mas o problema é que quando divido os valores por 0, recebo um erro em tempo de execução, embora esteja usando Inf com a função float.

Este é o meu código:

com arcpy.da.UpdateCursor ('flurstcuke_cropped5', ['FID', 'totresgeb', 'totresgbpt', 'difresarea', 'scaledif']) como cursor6: para linha6 no cursor6: linha6 [3] = linha6 [2] - row6 [1] try: row6 [4] = ((row6 [2] - row6 [1]) / row6 [1]) * 100 exceto ZeroDivisionError: row6 [4] = float ('INF') cursor6.updateRow ( [linha 6 [0], linha 6 [1], linha 6 [2], linha 6 [3], linha 6 [4]])

A mensagem que recebo é que 'o tipo de valor é incompatível com o tipo de campo. [scaledif]. ' E sei que está se referindo a Inf, pois também configurei um contador em meu script para determinar onde o programa está. Mas eu não entendo isso, uma vez que 'Inf' é um número flutuante aqui e o tipo do campo também é flutuante


float ("Inf")não é um verdadeiro flutuador. Você não pode fazer matemática normal com ele. Os campos de classe de recurso só podem armazenar valores numéricos reais, dentro de intervalos específicos. Da ajuda:

Tipo de dados | Intervalo armazenável ------------------------------------------------ --- Inteiro curto | -32.768 a 32.767 Número inteiro longo | -2.147.483.648 a 2.147.483.647 Float | Aproximadamente -3,4E38 a 1,2E38 Double | Aproximadamente -2,2E308 a 1,8E308

Se você quiser o maior valor possível, você deve ser capaz deimport sysE userow6 [4] = sys.float_info.max(embora este seja o tamanho do maior Duplo no ArcGIS, não o maior flutuador; a distinção entre flutuadores e duplos é borrada em Python).


Assista o vídeo: Arcpy Data Access Module Search Cursor