Python ArcGIS 字段计算器中的语法错误
Python Syntax error in ArcGIS field calculator
我一直无法获得一个简单的代码块,希望有人能找出问题所在。我觉得我瞎了。
1) 我在我的 ArcGIS 属性 table 中创建了一个名为 "SpeedLimit" 的新短整型字段,表示道路类型的速度限制。
2) 道路类型是在table 字段"fclass" 中找到的字符串。
我打开 SpeedLimit 字段的字段计算器并填写以下内容:
预逻辑脚本代码:
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
限速 =
Speed(!fclass!)
任何人都可以发现我做错了什么以收到语法错误吗?
编辑回复评论:
我收到来自 运行 更短更简单代码的错误:
def Speed(road):
if (road == 'secondary'):
return 70
else:
return 30
** 答案**
我根本没有 select "Python" 单选按钮...
谢谢大家的帮助。
class
是 Python 中的保留字,因此您应该为参数选择一个不同的名称,例如 cls
。此外,我不确定这是您的代码中的真正问题还是只是复制粘贴到 SO 的问题,引号字符是 '
,而不是 ‘
。如果我们把它们放在一起,这段代码应该可以正常工作:
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
你可能想要这个:
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))
但在 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))
请注意 elif
我使用 if
作为每个分支 returns 的值(因此跳过下一个语句)。
我一直无法获得一个简单的代码块,希望有人能找出问题所在。我觉得我瞎了。
1) 我在我的 ArcGIS 属性 table 中创建了一个名为 "SpeedLimit" 的新短整型字段,表示道路类型的速度限制。
2) 道路类型是在table 字段"fclass" 中找到的字符串。
我打开 SpeedLimit 字段的字段计算器并填写以下内容:
预逻辑脚本代码:
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
限速 =
Speed(!fclass!)
任何人都可以发现我做错了什么以收到语法错误吗?
编辑回复评论: 我收到来自 运行 更短更简单代码的错误:
def Speed(road):
if (road == 'secondary'):
return 70
else:
return 30
** 答案** 我根本没有 select "Python" 单选按钮... 谢谢大家的帮助。
class
是 Python 中的保留字,因此您应该为参数选择一个不同的名称,例如 cls
。此外,我不确定这是您的代码中的真正问题还是只是复制粘贴到 SO 的问题,引号字符是 '
,而不是 ‘
。如果我们把它们放在一起,这段代码应该可以正常工作:
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
你可能想要这个:
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))
但在 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))
请注意 elif
我使用 if
作为每个分支 returns 的值(因此跳过下一个语句)。