python - 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”来自哪里。有任何想法吗?非常感谢你们的帮助。我希望我放了足够的代码来理解这个问题。
解决方案
失败的原因是您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