Python &引用;“值是必需的”;关于arcpy.CalculateField

Python &引用;“值是必需的”;关于arcpy.CalculateField,python,arcpy,Python,Arcpy,我对Python非常陌生,正在尝试编写一个用于ArcGIS 10.1(arcpy)的脚本;基本思想是添加一个新字段(francis),检查其他几个字段中的值,如果有空(-99),然后将0输出到francis中,否则运行一个简单的计算。但是,我遇到了这个错误,并且很难超越它: 回溯(最近一次呼叫最后一次): 文件“C:\gislab 2\Python\take\u home\part1\prelim\u if2.py”,第28行,在arcpy.CalculateField\u管理中(输出特性类,“

我对Python非常陌生,正在尝试编写一个用于ArcGIS 10.1(arcpy)的脚本;基本思想是添加一个新字段(francis),检查其他几个字段中的值,如果有空(-99),然后将0输出到francis中,否则运行一个简单的计算。但是,我遇到了这个错误,并且很难超越它:

回溯(最近一次呼叫最后一次):

文件“C:\gislab 2\Python\take\u home\part1\prelim\u if2.py”,第28行,在arcpy.CalculateField\u管理中(输出特性类,“Francis”,“Python\u 9.3”,“”)

文件“C:\Program Files\ArcGIS\Desktop10.1\arcpy\arcpy\management.py”,第3128行,位于CalculateField e中

ExecuteError:未能执行。参数无效。错误000735:表达式:无法执行所需值(CalculateField)

这是密码

# Import arcpy module
import arcpy

print "start your engines"
# Script arguments
Shapefile = "C:\\gislab2\\Python\\take_home\\USCancer2000.shp"

Field_Name = Francis

Output_Feature_Class = "C:\\gislab2\\Python\\take_home\\USCancer2000.shp"

# Local variables:
USCancer2000__2_ = Output_Feature_Class

# Process: Add Field
arcpy.AddField_management(Shapefile, "Francis", "LONG", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

# Process: Calculate Field
arcpy.CalculateField_management(Output_Feature_Class, "Francis", "", "PYTHON_9.3", "")
##
### Process: If-then check for missing values
##
if "Cnt1"==-99:
    Field_name=7
elif "Cnt2"==-99:
    Field_name=7
elif "Cnt3"==-99:
    Field_name=7
elif "Pop1"==-99:
    Field_name==7
elif "Pop2"==-99:
    Field_name=7
elif "Pop3"==-99:
    Field_name=7
else:
        Field_name=("Cnt1"+"Cnt2"+"Cnt3")/("Pop1"+"Pop2"+"Pop3")
print "done"
非常感谢!
david

arcpy.CalculateField\u management中的第三个参数告诉它要计算什么。你没有经过那里。作为测试,将该线路更换为
arcpy.CalculateField\u管理(输出特性类,“Francis”,5,“PYTHON 9.3”和“”)
并查看它是否计算

一旦它成功运行,那么您应该考虑使用表达式和代码块来执行所需的计算。请参见计算范围(第三个)示例

--备选方案--

您还可能会发现使用更方便。这似乎比使用calculateField要花更多的时间,但是它可以更快,并且省去了编写复杂代码块的麻烦

# Import arcpy module
import arcpy

print "start your engines"
# Script arguments
Shapefile = "C:\\gislab2\\Python\\take_home\\USCancer2000.shp"

Field_Name = "Francis"

# Process: Add Field
arcpy.AddField_management(Shapefile, "Francis", "LONG", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

fields = ["Cnt1", "Cnt2", "Cnt3", "Pop1", "Pop2", "Pop3", "Francis"] # the fields you want available to you in the cursor

with arcpy.da.UpdateCursor(shapefile, fields) as cursor:
    for row in cursor: # step through each row
        if not -99 in row: # Check for nulls
            # none found, do the math
            row[6] = (row[0] + row[1] + row[2]) / (row[3] + row[4] + row[5])
        else:
            # nulls found, zero out the result
            row[6] = 0
        cursor.updateRow(row) # save it

print "done"

能否显示堆栈跟踪回溯(最近一次调用):文件“C:\Gislab 2\Python\take\u home\part1\prelim\u if2.py”,第28行,在arcpy.CalculateField\u管理(输出特性类,“Francis”,“Python\u 9.3”,“Python”)文件“C:\Program Files\ArcGIS\Desktop10.1\arcpy\arcpy\arcpy\management.py”,第3128行,在CalculateField中,raise ExecuteError:未能执行。参数无效。错误000735:表达式:无法执行所需值(CalculateField)。>>提前感谢,但在您的问题中,在哪里可以正确格式化,人们可以阅读它!只是把它放在问题中,但格式仍然看起来不可靠,即使我试图将其表示为代码块,我试图修复您的回溯格式,但您粘贴的源代码已经有了所有空白,所以我不得不做很多猜测。您需要使用原始换行符进行复制。