2017-05-22 9 views
1

単純なコードブロックを手に入れることができず、誰かが何が間違っているのかを知りたいと思っています。私は盲目のように感じる。ArcGISフィールド計算の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 

SpeedLimit =

Speed(!fclass!) 

誰もが、私は「何を見つけることができ構文エラーを受け取るのが間違っていますか?コメントへの応答で

編集: 私は短く、シンプルなコード実行がエラーが発生します:

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

enter image description here

** ANSWERを** 私は単純にしませんでした"Python"ラジオボタンを選択してください... ご協力いただきありがとうございます。

+3

引用符が間違っています。 – timgeb

+0

変数名として 'class'を使うことはできません。 – user2357112

+0

変数名と引用符を変更しても、問題は緩和されません。/ –

答えて

1

をあなたは、おそらくこの欲しかっ:

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 を使用しました。すべてのブランチが値を返すので(次のステートメントはスキップされます)。

1

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 
+0

残念ながら、コードに問題はないようですが、エラーはそのままです。今私のポストに画像を添付しています –

+0

私はあなたの援助のためにupvoted、問題を把握しました。 –