获取关键错误:实现foursquare api时python中的“组”

Posted

技术标签:

【中文标题】获取关键错误:实现foursquare api时python中的“组”【英文标题】:Getting key error: 'groups' in python when implementing foursquare api 【发布时间】:2022-01-14 16:38:42 【问题描述】:

我在尝试使用 Foursquare API 获取附近的场所时遇到 keyerror: 'groups'。以下是我的代码:

任何帮助将不胜感激。谢谢。

def getNearbyVenues(names, latitudes, longitudes, radius = 1200):
    
    venues_list=[]
    for name, lat, lng in zip(names, latitudes, longitudes):   
        url = 'https://api.foursquare.com/v2/venues/explore?&client_id=&client_secret=&v=&ll=,&radius=&limit='.format(
            CLIENT_ID, 
            CLIENT_SECRET, 
            VERSION, 
            lat, 
            lng, 
            radius, 
            LIMIT)
            
        results = requests.get(url).json()["response"]['groups'][0]['items']
        
        venues_list.append([(
            name, 
            lat, 
            lng, 
            v['venue']['name'], 
            v['venue']['location']['lat'], 
            v['venue']['location']['lng'],  
            v['venue']['categories'][0]['name']) for v in results])

    nearby_venues = pd.DataFrame([item for venue_list in venues_list for item in venue_list])
    nearby_venues.columns = ['City', 
                  'City Latitude', 
                  'City Longitude', 
                  'Venue', 
                  'Venue Latitude', 
                  'Venue Longitude', 
                  'Venue Category']
    
    return(nearby_venues)

texas_venues = getNearbyVenues(names = coords['City'], latitudes = coords['CityLat'], longitudes = coords['CityLong'])

【问题讨论】:

那么,requests.get(url).json()["response"] 返回的是什么?问题显然是无论它返回什么,它都不包含密钥groups。调试的第一步应该是查看实际返回的内容与您期望的内容。将来也请发布完整的堆栈跟踪;这样我们就可以真正看到错误的详细信息、错误所在的行以及所有这些。 我修复了您帖子的缩进,但没有看到该错误。相反,我看到一个关于—— NameError: name 'coords' is not defined 的抱怨——这是有道理的,因为您的代码不完整。当您发布重现错误/失败的运行代码时,您将获得最大的帮助。 【参考方案1】:

您看到的错误来自以下行:

results = requests.get(url).json()["response"]['groups'][0]['items']

它接受json() 调用的返回,这是一个字典。然后它使用键“响应”来提取它期望的另一个字典,该字典具有键“组”。但是返回的任何 dict 都没有该键,这就是您看到该错误的原因。

您可以将提取分解为多个步骤,以帮助调试并使您的代码更加健壮。与在 d[key] 中通过键访问 dict 值不同,d.get(key) 是一种更具容错性的方式,如果找不到键(而不是抛出异常),它将返回 None。所以你可能会改变上面的行:

results = requests.get(url).json()["response"]['groups'][0]['items']

到:

response_ = requests.get(url).json()["response"]
groups_ = response_.get('groups')
if groups_:
    results = groups_[0].get('items')
    if results:
        "blah blah blah"
else:
    print(f"groups_=") # debug-friendly print output
    breakpoint()

然后,当你让你的代码以你想要的方式运行时,你就可以摆脱额外的调试行......

【讨论】:

以上是关于获取关键错误:实现foursquare api时python中的“组”的主要内容,如果未能解决你的问题,请参考以下文章

Foursquare Tips:网站上API和Explore的区别

如何在Web API中使用C#获取Foursquare OAuth请求代码?

场地外搜索 Foursquare API

使用 Python 代码从 Foursquare API 中提取特定场地类别

Foursquare iPhone API 附近的地方

地理本地 google Maps API 业务结果foursquare 喜欢 iphone