[英]Python Syntax error in ArcGIS field calculator
I've been unable to get a simple block of code and am hoping someone can spot what is wrong. 我一直无法获得一个简单的代码块,希望有人能发现问题所在。 I feel like I'm blind. 我觉得我是盲人。
1) I create a new short integer field called "SpeedLimit" in my ArcGIS attribute table that signifies the speed limit for a road type. 1)我在ArcGIS属性表中创建了一个新的短整数字段,称为“ SpeedLimit”,它表示道路类型的速度限制。
2) The road type is a string found in the field "fclass" in the same table. 2)道路类型是在同一表的“ fclass”字段中找到的字符串。
I open the field calculator for the SpeedLimit field and fill the following: 我打开SpeedLimit字段的字段计算器,并填写以下内容:
Pre-Logic Script Code: 逻辑前脚本代码:
def Speed(class):
if (class == ‘secondary’ or class == ‘tertiary’ or class == ‘trunk’ or class == ‘motorway’ or class == ‘primary’):
return 70
elif (class == ‘secondary_link’ or class == ‘tertiary_link’ or class == ‘trunk_link’ or class == ‘motorway_link’ or class == ‘primary_link’):
return 45
elif (class == ‘service’ or class == ‘track_grade1’ or class == ‘track_grade2’ or class == ‘track_grade3’ or class == ‘track_grade4’ or class == ‘track_grade5’):
return 15
else:
return 30
SpeedLimit = SpeedLimit =
Speed(!fclass!)
Can anyone spot what I'm doing wrong to receive a syntax error? 谁能发现我在做错的错误,从而收到语法错误?
Edit in response to the comments: I am receiving the error from running a shorter and simpler code: 根据评论进行编辑:我通过运行更短,更简单的代码收到错误:
def Speed(road):
if (road == 'secondary'):
return 70
else:
return 30
** THE ANSWER** I simply did not select the "Python" radio button... Thank you all for your assistance. **答案**我只是没有选择“ Python”单选按钮...谢谢大家的帮助。
class
is a reserved word in Python, so you should choose a different name for your parameter, eg, cls
. class
是Python中的保留字,因此您应该为参数选择其他名称,例如cls
。 Additionally, and I'm not sure if this is a real problem in your code or just a copy-paste-to-SO issue, the quote character is '
, not '
. 另外,我不确定这是代码中的实际问题还是仅是复制粘贴至SO问题,所以引号是'
,不是'
。 If we bring it all together, this code should work properly: 如果我们将所有这些放在一起,则此代码应该可以正常工作:
def speed(cls):
if (cls == 'secondary' or cls == 'tertiary' or cls == 'trunk' or cls == 'motorway' or cls == 'primary'):
return 70
elif (cls == 'secondary_link' or cls == 'tertiary_link' or cls == 'trunk_link' or cls == 'motorway_link' or cls == 'primary_link'):
return 45
elif (cls == 'service' or cls == 'track_grade1' or cls == 'track_grade2' or cls == 'track_grade3' or cls == 'track_grade4' or cls == 'track_grade5'):
return 15
else:
return 30
You probably wanted this: 您可能想要这样:
def speed(aClass):
if (aClass == 'secondary' or aClass == 'tertiary' or aClass == 'trunk' or aClass == 'motorway' or aClass == 'primary'):
return 70
elif (aClass == 'secondary_link' or aClass == 'tertiary_link' or aClass == 'trunk_link' or aClass == 'motorway_link' or aClass == 'primary_link'):
return 45
elif (aClass == 'service' or aClass == 'track_grade1' or aClass == 'track_grade2' or aClass == 'track_grade3' or aClass == 'track_grade4' or aClass == 'track_grade5'):
return 15
else:
return 30
fclass = 'tertiary_link'
print(speed(fclass))
but in Python is more elegant this: 但在Python中,这更优雅:
def speed(aClass):
if aClass in ['secondary',
'tertiary',
'trunk',
'motorway',
'primary']:
return 70
if aClass in ['secondary_link',
'tertiary_link',
'trunk_link',
'motorway_link',
'primary_link']:
return 45
if aClass in ['service',
'track_grade1',
'track_grade2',
'track_grade3',
'track_grade4',
'track_grade5']:
return 15
else:
return 30
fclass = 'tertiary_link' # Only for testing
print(speed(fclass))
Note that instead elif
I used if
as every your branch returns a value (so the next statements are skipped). 请注意, if
您的每个分支都返回一个值(因此跳过下一个语句),则使用elif
代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.