2016-09-21 17 views
-1

私のコースはPythonで、座標上の2つの都市間の距離を計算するプログラムを作成しています。それは働いていると、突然、私は次のエラーを得た:私は検索と検索しましたTypeError: - : 'NoneType'と 'NoneType'のためのサポートされていないオペランドタイプ

import math 

def Haversine (lat_1, lat_2, lon_1, lon_2): 
    a_1 = math.sin((lat_2 - lat_1)/2) ** 2 
    a_2 = math.cos(lat_1) * math.cos(lat_2) 
    a_3 = math.sin((lon_2-lon_1)/2) ** 2 
    a_4 = a_1 + a_2 * a_3 
    b = 1 - a_4 
    d = 2 * math.atan2(math.sqrt(a_4), math.sqrt(b)) 

def conversion (sign, degrees, minutes): 
    minutes_to_degrees = 1/60.0 * minutes 
    total_degrees = minutes_to_degrees + degrees 
    radians = total_degrees * 1/180.0 * math.pi 
    total_radians = sign * radians 

def distance (sign_lat_1, deg_lat_1, min_lat_1, 
       sign_lon_1, deg_lon_1, min_lon_1, 
       sign_lat_2, deg_lat_2, min_lat_2, 
       sign_lon_2, deg_lon_2, min_lon_2): 
    lat_1 = conversion(sign_lat_1, deg_lat_1, min_lat_1) 
    lon_1 = conversion(sign_lon_1, deg_lon_1, min_lon_1) 
    lat_2 = conversion(sign_lat_2, deg_lat_2, min_lat_2) 
    lon_2 = conversion(sign_lon_2, deg_lon_2, min_lon_2) 
    distance = Haversine(lat_1, lat_2, lon_1, lon_2) * 6367.0 
    return distance 

が、私はというエラーを見つけるように見えることはできません。

Traceback (most recent call last): 
    File "<pyshell#13>", line 1, in <module> 
    distance(+1, 52, 22, +1, 4, 32, +1, 45, 30, -1, 73, 35) 
    File "C:/Python27/flying_distances_1.py", line 26, in distance 
    distance = Haversine(lat_1, lat_2, lon_1, lon_2) * 6367.0 
    File "C:/Python27/flying_distances_1.py", line 4, in Haversine 
    a_1 = math.sin((lat_2 - lat_1)/2) ** 2 
TypeError: unsupported operand type(s) for -: 'NoneType' and 'NoneType' 

これはそれで行くのコードです私のコードで前述のメッセージを引き起こします。おそらくそれは本当に小さいもの(おそらくかなり愚かなものです)ですが、エラーを見つけた人が私をトラックに戻すのに役立ちます!

+0

'conversion'は' None'を返します。 – vaultah

+0

さて、素晴らしいですが、何が解決しますか? –

+0

'-'をサポートするものを返します。 – vaultah

答えて

2

conversion関数にreturn文がありません。現時点では、関数が終了すると、ラジアン値が計算されて忘れられます。あなたがtotal_radiansの値が関数の外部からアクセスできるようにしたい場合は、変換関数の最後の行として

return total_radians 

を追加します。

+0

ありがとう、それは多くの助けとなりました。そして、私が予測したように、これは私の終わりからの本当に愚かな間違いでした。 –

+0

あなたがこの回答が助けになったと感じたら、あなたはアップフォートして受け入れるかもしれません。 –

関連する問題