3

When I calculate a field like this:

field_0="field_name0"
arcpy.CalculateField_management("Layer", field_0, '!field_name1! / !field_name2!', "PYTHON_9.3")

It works! The field "field_name0" in the attribute table is populated with the value calculated from fields "field_name1" and "field_name2".

But, if I use variables instead of field names:

field_0="field_name0"
field_1="!field_name1!"
field_2="!field_name2!"
arcpy.CalculateField_management("Layer", field_0, 'field_1 / field_2', "PYTHON_9.3")

I get this error:

Runtime error Traceback (most recent call last): File "", line 3, in File "c:\program files (x86)\arcgis\desktop10.2\arcpy\arcpy\management.py", line 3354, in CalculateField raise e ExecuteError: ERROR 000539: Error running expression: field_1/ field_2 Traceback (most recent call last):
File "", line 1, in NameError: name 'field_1' is not defined Failed to execute (CalculateField).

I want to use loops later on, that's why I want it to work with variables, and not simply with direct field names.

3 Answers 3

4

Based on your variable, you just need to make sure variables and strings are not confused

field_1="!field_name1!"
field_2="!field_name2!"

arcpy.CalculateField_management("Layer", field_0, field_1 + " / " + field_2, "PYTHON_9.3")

note that if you have the strings as variables without the "!", it is nicer to use format()

field_1="field_name1"
field_2="field_name2"

arcpy.CalculateField_management("Layer", field_0, """!{}!/!{}!""".format(field_1,field_2), "PYTHON")
2

You are missing the wrapping exclamation marks, try this:

arcpy.CalculateField_management("Layer", field_0, '!' + field_1 + '!/!' + field_2 + '!', "PYTHON_9.3")
1
  • 2
    in the middle, it should be '!/!' and not '/', otherwise your field names are not distinguished
    – radouxju
    Oct 20, 2014 at 21:41
2

You have embedded the string variable within a string so python sees it as a string.

I would suggest you make you code something like:

field_0="field_name0"
calcString = "!field_name1! / !field_name2!"
arcpy.CalculateField_management("Layer", field_0, calcString', "PYTHON_9.3")
1
  • 2
    I do not think the calcString should be hard coded, reference variables instead.
    – artwork21
    Oct 20, 2014 at 20:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.