#python
Вопрос:
Я пытаюсь понять, как справиться с этой ошибкой типа в моей программе. Я получаю ошибку типа в этой функции
# 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:UsersDeNyus KeysPycharmProjectsC950main.py", line 21, in <module>
start_trucks(timedelta(hours=-0))
File "C:UsersDeNyus KeysPycharmProjectsC950trucks.py", line 32, in start_trucks
run_routes(truck1, time)
File "C:UsersDeNyus KeysPycharmProjectsC950trucks.py", line 48, in run_routes
new_distance = find_distance(current_location, package_address) # Calls find_distance() function
File "C:UsersDeNyus KeysPycharmProjectsC950trucks.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, которое является идентификатором пакетов, поэтому я не знаю, откуда берется «Нетип». Есть какие-нибудь идеи? Большое вам спасибо, ребята, за любую помощь. Я надеюсь, что написал достаточно кода, чтобы понять проблему.
Комментарии:
1. Он, безусловно, возвращается
None
, когда не может найти соответствующий адрес вaddress_data
.2. В сообщении об ошибке говорится, что первый вызов
find_address(package_address)
не возвращает ни одного. Это произойдет, еслиwhile i < len(address_data):
завершится без каких-либо результатов, и функция завершится возвращаемым по умолчанию значением None.3. Итак, что должно произойти, если
find_address
адрес не найден?
Ответ №1:
Причина сбоя в том, что у 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
Ответ №2:
Немного научившись использовать отладчик, я обнаружил, что используемый адрес package_address был "2010 West 500 S"
в то время как адрес в загрузчике CSV, на который он ссылался, был "2010 West 500 South"
. Как только я переименую его в точное соответствие, программа запустится.