TypeError:“>”在“NoneType”和“int”(Python)的实例之间不受支持

2024-06-16 12:14:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试图找出如何在我的程序中处理这个类型错误。我在这个函数中得到一个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'来自哪里。有什么想法吗?非常感谢你们的帮助。我希望我输入了足够的代码来理解这个问题


Tags: pypackagedataaddresslinecurrentkeysfind
2条回答

失败的原因是您的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

在稍微学习使用调试器之后,我发现正在使用的包地址是"2010 West 500 S",而它所引用的CSV加载程序中的地址是"2010 West 500 South"。一旦我将其重命名为完全匹配,程序就会运行

相关问题 更多 >