对于我的Python课程,我正在创建一个程序,根据坐标计算两个城市之间的距离。它已经工作,突然我得到以下错误:
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'
这是随之而来的代码:
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
我搜索过并搜索过,但我似乎无法找到导致我的代码中出现上述消息的错误。它可能是非常小的(可能非常愚蠢;)),但能找到错误的人会帮助我回到正轨!
答案 0 :(得分:2)
conversion
函数中没有return语句。此时,计算弧度值,然后在函数完成时忘记。如果您希望从函数外部访问total_radians
的值,请添加
return total_radians
作为转换函数的最后一行。