Python Parser in ArcGIS – Using Nested If Statements in Field Calculator

arcgis-desktopfield-calculatorpython-parservbscript

The solution in VB for the base process is at If/then VBScript/Python code equivalent to SQL IN ('x','y',z') expression in ArcGIS Field Calculator? works great but I was trying to nest 'if' statements and can't.

So pre-logic code of

if [grid_code] = 1 then 
f2= 2
end if
if [grid_code] = 2 then
f2=3.5
end if

…etc. but this doesn't work.

What am I doing wrong?

I tried the second 'if' before the 'end if' and also tried 'elif' but these give script errors.

Also I am seeing a warning message about "The calculated value is invalid for the row with objectID=1" and when you click click 'yes' to continue it works fine.

Best Answer

For VB, something like this should work, I think:

Pre-logic script code:

Dim f2 As Double
If [grid_code] = 1 Then
  f2 = 2
ElseIf [grid_code] = 2 Then
  f2 = 3.5
End If

asp_code =

f2

In Python, I think it would be something like this (though I don't have ArcGIS 10 so I can't check):

Pre-logic script code:

def my_func(my_field):
    if my_field == 1:
        f2 = 2
    elif my_field == 2:
        f2 = 3.5
    return f2

asp_code =

my_func(!grid_code!)

The error message saying that the "calculated value is invalid" is a bit strange. Perhaps double-check that your asp_code field is of float or double data type (not integer), and that you have all of the options in the grid_code field covered by your if statements? Sorry if that's too obvious, but it's all I can think of at the moment. Good luck!

Related Question