Python程序出现TypeError:获取上海交通大学place_id失败求助
解决Python调用Web服务提取place_id的TypeError问题
首先,咱们先梳理下这类场景里最容易触发TypeError的几个常见坑,再给你一个可运行的示例代码,对照着你自己的代码排查应该就能找到问题:
常见错误原因
- 直接操作响应对象而非JSON数据:比如你用
requests.get()拿到响应后,没调用.json()方法就直接去取键,这会触发TypeError,因为响应对象不是字典/列表类型。 - 访问不存在的嵌套键/索引:比如JSON返回的结构和你预期的不一样,你直接
data['results'][0]['place_id'],但如果results是空列表或者根本不存在这个键,就会报错。 - 请求参数类型错误:比如Web服务要求参数是字符串,但你传了其他类型(比如整数),或者拼接URL时用了错误的类型拼接。
可运行的示例代码
假设你用的是常见的地理编码Web服务(比如Google Places API),下面是完整的可运行代码,你可以对照自己的代码找差异:
import requests def get_place_id(location): # 替换成你自己的API密钥 api_key = "YOUR_API_KEY" base_url = "https://maps.googleapis.com/maps/api/geocode/json" # 构造请求参数,确保所有参数都是字符串类型 params = { 'address': location, 'key': api_key } try: # 发送GET请求 response = requests.get(base_url, params=params) # 检查请求是否成功(比如404、500这类错误) response.raise_for_status() # 关键步骤:把响应转换成JSON字典,别忘调用.json() data = response.json() # 先校验返回结构是否符合预期 if 'results' in data and len(data['results']) > 0: return data['results'][0]['place_id'] else: print("未找到匹配的地点信息") return None except TypeError as e: print(f"触发TypeError:{e}") print("大概率是没正确解析JSON,或者访问了不存在的键/索引") except requests.exceptions.RequestException as e: print(f"请求出错:{e}") # 测试获取上海交通大学的place_id location_input = input("请输入地点:") or "Shanghai Jiao Tong University" place_id = get_place_id(location_input) if place_id: print(f"首个place_id是:{place_id}")
快速排查步骤
- 先检查你的代码里有没有调用
.json()方法:如果直接用response['results']操作响应对象,肯定会触发TypeError,因为Response对象不支持下标访问。 - 打印实际返回的JSON数据:可以在解析后加
print(data),看看真实的键名和层级结构,比如有些服务可能返回data['data']['results']而非直接data['results']。 - 检查参数传递:比如拼接URL时有没有把非字符串类型的变量直接拼进去,这种操作可能导致请求返回异常数据,间接引发TypeError。
如果把你的代码贴出来,我能更精准地帮你定位问题,但根据常见情况,上面的几点应该能覆盖绝大多数TypeError的原因了。
内容的提问来源于stack exchange,提问作者Amanda M.
相关产品推荐
相关产品推荐

