【问题标题】:TypeError: unsupported operand type(s) for -: 'NoneType' and 'NoneType'TypeError: 不支持的操作数类型 -: 'NoneType' 和 'NoneType'
【发布时间】:2016-09-22 00:52:34
【问题描述】:

对于我的 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

我已经搜索和搜索,但我似乎无法在我的代码中找到导致上述消息的错误。它可能真的很小(而且可能很愚蠢;)),但是能找到错误的人会帮助我回到正轨!

【问题讨论】:

  • conversion 返回None
  • 嗯,很好,但是什么解决了它?
  • 让它返回支持-的东西。
  • 你想让 lat_1, lon_1 代表什么?
  • 当然!谢谢,这使我的错误减少了两行!

标签: python typeerror


【解决方案1】:

conversion 函数中没有返回语句。目前,弧度值被计算出来,然后在函数完成时被遗忘。如果您希望从函数外部访问total_radians 的值,请添加

    return total_radians

作为转换函数的最后一行。

【讨论】:

  • 谢谢,帮了大忙。而且,正如我所预料的那样,这对我来说是一个非常愚蠢的错误。
  • 如果您觉得这个答案对您有帮助,您可以点赞并接受。
猜你喜欢
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 2017-12-27
  • 2014-03-31
  • 2017-06-06
  • 2021-05-23
  • 2014-03-28
  • 2018-06-20
相关资源
最近更新 更多