首页 > 解决方案 > TypeError:“NoneType”和“int”实例之间不支持“>”(Python)

问题描述

我试图弄清楚如何在我的程序中处理这个 TypeError 。我在这个函数中得到一个 TypeError

    # Function will get the distances between current location and next package's delivery address.
def find_distance(current_address, package_address):
    if find_address(package_address) > find_address(current_address):
        current_distance = distance_data[find_address(package_address)][
            find_address(current_address)]
    else:
        current_distance = distance_data[find_address(current_address)][
            find_address(package_address)]
    return current_distance

该函数调用另一个函数 find_address()

   def find_address(address):
    i = 0
    while i < len(address_data):
        if address == address_data[i][1]:
            return i
        else:
            i = i + 1


Traceback (most recent call last):
  File "C:\Users\DeNyus Keys\PycharmProjects\C950\main.py", line 21, in <module>
    start_trucks(timedelta(hours=-0))
  File "C:\Users\DeNyus Keys\PycharmProjects\C950\trucks.py", line 32, in start_trucks
    run_routes(truck1, time)
  File "C:\Users\DeNyus Keys\PycharmProjects\C950\trucks.py", line 48, in run_routes
    new_distance = find_distance(current_location, package_address)  # Calls find_distance() function
  File "C:\Users\DeNyus Keys\PycharmProjects\C950\trucks.py", line 77, in find_distance
    if find_address(package_address) > find_address(current_address):
TypeError: '>' not supported between instances of 'NoneType' and 'int'

find_address() 函数返回一个 int,它是包 ID 号,所以我不知道“Nonetype”来自哪里。有任何想法吗?非常感谢你们的帮助。我希望我放了足够的代码来理解这个问题。

标签: python

解决方案


失败的原因是您address_data没有package_address通过的条目,所以如果没有任何地址作为回报,您可以做的是address_data返回“无法计算距离”。

def find_distance(current_address, package_address):
    package_address = find_address(package_address)
    current_address = find_address(current_address)
    if not package_address or not current_address:
        return "Unable to get the distance between the address"

    if find_address(package_address) > find_address(current_address):
        current_distance = distance_data[find_address(package_address)][
            find_address(current_address)]
    else:
        current_distance = distance_data[find_address(current_address)][
            find_address(package_address)]
    return current_distance

推荐阅读