获取关键错误:实现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请求代码?