Ошибка типа: «> » не поддерживается между экземплярами «NoneType» и «int» (Python)

#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" . Как только я переименую его в точное соответствие, программа запустится.