0

“更新”

* 终于解决了这个问题,改了 try except 以包含 TypeError 并且还在 except 中使用 pass 而不是 continue。

“更新结束”

我编写了代码来使用 Google 距离矩阵 API 搜索两个位置之间的距离。原始位置是固定的,但是对于目的地,我从 xlsx 文件中获取它。我期待得到 Dictionary 与 Destination 作为Key和 distance 作为value。当我运行下面的代码时,在某个循环之后,我偶然发现了这个错误代码:

TypeError: Expected a lat/lng dict or tuple, but got NoneType

你能帮我理解错误的原因吗?这是代码(pygmap.py):

import googlemaps
import openpyxl

#get origin and destination locations
def cleanWB(file_path):
    destination = list()

    wb = openpyxl.load_workbook(filename=file_path)
    ws = wb.get_sheet_by_name('Sheet1')
    for i in range(ws.max_row):
        cellValueLocation = ws.cell(row=i+2,column=1).value
        destination.append(cellValueLocation)

    #remove duplicates from destination list
    unique_location = list(set(destination))
    return unique_location

def getDistance(origin, destination):
    #Google distance matrix API key
    gmaps = googlemaps.Client(key = 'INSERT API KEY')
    distance = gmaps.distance_matrix(origin, destination)
    distance_status = distance['rows'][0]['elements'][0]['status']
    if distance_status != 'ZERO_RESULTS':
        jDistance = distance['rows'][0]['elements'][0]
        distance_location = jDistance['distance']['value']
    else:
        distance_location = 0

    return distance_location

我使用以下代码运行它:

import pygmap

unique_location = pygmap.cleanWB('C:/Users/an_id/Documents/location.xlsx')
origin = 'alam sutera'
result = {}
for i in range(len(unique_location)):
    try:
        result[unique_location[i]] = pygmap.getDistance(origin, unique_location[i])
    except (KeyError, TypeError):
        pass

如果我打印结果,它将显示我已成功获得 46 个结果

结果{'Pondok Pinang':25905,'Jatinegara Kaum':40453,'Serdang':1623167,'Jatiasih':44737,'Tanah Sereal':77874,'Jatikarya':48399,'Duri Kepa':20716,'Mampan g Prapatan':31880,'Pondok Pucung':12592,'Johar Baru':46791,'Karet':26889,'Bukit Duri':34039,'Sukamaju':55333,'Pasir Gunung Selatan':42140,'Pinangs ia ':30471,'Pinang Ranti':38099,'Bantar Gebang':50778,'Sukabumi Utara':204 41,'Kembangan Utara':17708,'Kwitang':25860,'Kuningan Barat':31231,'Cilodo ng' : 58879, 'Pademangan Barat': 32585, 'Kebon Kelapa': 23452, 'Mekar Jaya': 5381 0,'Kampung Bali':1188894,'Pajang':30008,'Sukamaju Baru':53708,'Benda Baru':19965,'Sukabumi Selatan':19095,'Gandaria Utara':28429,'Setia Mulya':635 34,' Rawajati':31724,'Cireundeu':28220,'Cimuning':55712,'Lebak Bulus':273 61,'Kayuringin Jaya':47560,'Kedaung Kali Angke':19171,'Pagedangan':16791,'Karang Anyar' : 171165, 'Petukangan Selatan': 18959, 'Rawabadak Selatan': 42765, 'Bojong Sari Baru': 26978, 'Padurenan': 53216, 'Jati Mekar': 2594703, 'Jatirang ga': 51119}Sukabumi Selatan':19095,'Gandaria Utara':28429,'Setia Mulya':635 34,'Rawajati':31724,'Cireundeu':28220,'Cimuning':55712,'Lebak Bulus':273 61,'Kayuringin Jaya ':47560,'Kedaung Kali Angke':19171,'Pagedangan':16791,'Karang Anyar':171165,'Petukangan Selatan':18959,'Rawabadak Selatan':42765,'Bojong Sari Baru':26978,'Padurenan' :53216,'Jati Mekar':2594703,'Jatirang ga':51119}Sukabumi Selatan':19095,'Gandaria Utara':28429,'Setia Mulya':635 34,'Rawajati':31724,'Cireundeu':28220,'Cimuning':55712,'Lebak Bulus':273 61,'Kayuringin Jaya ':47560,'Kedaung Kali Angke':19171,'Pagedangan':16791,'Karang Anyar':171165,'Petukangan Selatan':18959,'Rawabadak Selatan':42765,'Bojong Sari Baru':26978,'Padurenan' :53216,'Jati Mekar':2594703,'Jatirang ga':51119}Kedaung Kali Angke':19171,'Pagedangan':16791,'Karang Anyar':171165,'Petukangan Selatan':18959,'Rawabadak Selatan':42765,'Bojong Sari Baru':26978,'Padurenan':53216,'Jati Mekar':2594703,'Jatirang ga':51119}Kedaung Kali Angke':19171,'Pagedangan':16791,'Karang Anyar':171165,'Petukangan Selatan':18959,'Rawabadak Selatan':42765,'Bojong Sari Baru':26978,'Padurenan':53216,'Jati Mekar':2594703,'Jatirang ga':51119}

4

1 回答 1

0

解决了包含TypeErrorTry Except. 并且还使用pass代替continue

import pygmap

unique_location = pygmap.cleanWB('C:/Users/an_id/Documents/location.xlsx')
origin = 'alam sutera'
result = {}


#get getPlace
for i in range(len(unique_location)):
    try:
        result[unique_location[i]] = pygmap.getDistance(origin, unique_location[i])
    except (KeyError, TypeError):
        pass

不过,我使用此解决方案跳过了一些位置。

于 2016-10-20T09:06:11.800 回答