ArcGIS字段计算中的Python语法错误

2024-09-23 22:24:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直无法得到一个简单的代码块,希望有人能发现什么是错误的。我觉得我是瞎子。在

1)我在ArcGIS属性表中创建了一个新的短整数字段“SpeedLimit”,它表示道路类型的速度限制。在

2)道路类型是同一表中字段“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

速度限制=

^{pr2}$

有人能发现我做错了什么而收到语法错误吗?在

根据评论进行编辑: 我收到了运行一个更短更简单的代码的错误:

def Speed(road):
    if (road == 'secondary'):   
        return 70
    else:
        return 30

enter image description here

**答案** 我只是没有选择“Python”单选按钮。。。 谢谢大家的帮助。在


Tags: or代码类型returnifdef错误link
2条回答

你可能想要这个:

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中更为优雅的是:

^{pr2}$

请注意,elif我使用了if,因为每个分支都返回一个值(因此将跳过下一个语句)。在

class是Python中的保留字,因此您应该为参数选择一个不同的名称,例如cls。另外,我不确定这是否是代码中的一个真正的问题,或者只是一个复制粘贴,引号字符是',而不是{}。如果我们把它们结合起来,这个代码应该可以正常工作:

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

相关问题 更多 >