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

标签 python if-statement field arcgis

我一直无法获得简单的代码块,希望有人能够发现问题所在。我感觉自己像个瞎子。

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

速度限制=

Speed(!fclass!)

任何人都可以发现我做错了什么而收到语法错误吗?

编辑回应评论: 我因运行更短、更简单的代码而收到错误:

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

enter image description here

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

最佳答案

您可能想要这个:

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,因为每个分支都会返回一个值(因此会跳过接下来的语句)。

关于ArcGIS 字段计算器中的 Python 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44121627/

相关文章:

python - 使用 Python/urllib2 处理 rss 重定向

r - 有条件地改变 R 中的多列

if-statement - 何时在 Rust 中使用 `std::cmp::ordering` 而不是 `if` 语句

windows - 在 Windows 批处理文件脚本中使用 if 语句

javascript - 隐藏字段中的默认文本 - Javascript?

python - 将字符串的所有字母加 1

python - 使用 Vowpal Wabbit 的命名实体识别似乎可以记住训练数据

python - 如何在 python 中导出给定(iso)周数/年的周开始

C#、不变性和公共(public)只读字段

c - 我书中带有位字段的结构的大小不准确