提取API响应数据时遭遇TypeError: list indices must be integers or slices, not str
解决randomuser.me API调用中的TypeError问题
错误原因
从API返回的响应可以看到,response['results']是列表类型(被方括号[]包裹),即便你指定了results=1,接口依然会返回包含单个用户对象的列表。而你的代码直接用字符串'name'索引这个列表,就会触发TypeError: list indices must be integers or slices, not str——列表仅支持整数索引或切片,不能用字符串索引。
修正后的代码
只需将results = response['results']改为results = response['results'][0],取出列表中唯一的用户对象,后续字段访问即可正常执行:
response = requests.get('https://randomuser.me/api?results=1&gender=&password=upper,lower,12&exc=register,picture,id&nat=US', headers=headers).json() # 取出列表中的第一个(也是唯一一个)用户对象 results = response['results'][0] firstname = results['name']['first'] lastname = results['name']['last'] streetname = results['location']['street']['name'] streetnumber = results['location']['street']['number'] city = results['location']['city'] state = results['location']['state'] zipcode = results['location']['postcode'] phone = results['phone'] print(firstname, lastname, streetname, streetnumber, city, state, zipcode, phone)
原错误代码
response = requests.get('https://randomuser.me/api?results=1&gender=&password=upper,lower,12&exc=register,picture,id&nat=US', headers=headers).json() results = response['results'] firstname = results['name']['first'] lastname = results['name']['last'] streetname = results['location']['street']['name'] streetnumber = results['location']['street']['number'] city = results['location']['city'] state = results['location']['state'] zipcode = results['location']['postcode'] phone = results['phone'] print(firstname, lastname, streetname, streetnumber, city, state, zipcode, phone)
完整报错信息
Traceback (most recent call last): File "c:\Users\user\documents\main\main.py", line 100, in <module> GetInfo() File "c:\Users\user\documents\main\main.py", line 36, in InfoGen firstname = results['name']['first'] TypeError: list indices must be integers or slices, not str
API响应示例
{ "results": [{ "gender": "male", "name": { "title": "Mr", "first": "Vilho", "last": "Nevala" }, "location": { "street": { "number": 5260, "name": "Satakennankatu" }, "city": "Ypäjä", "state": "Päijät-Häme", "country": "Finland", "postcode": 90828, "coordinates": { "latitude": "63.8355", "longitude": "-80.4611" }, "timezone": { "offset": "-10:00", "description": "Hawaii" } }, "email": "vilho.nevala@example.com", "login": { "uuid": "f918cf9e-edd0-4723-aca9-a7b835933d64", "username": "happyfish285", "password": "hfjZmaLSgLLs", "salt": "411bCjmy", "md5": "1ce0803440b62127f514fcf1481bff03", "sha1": "48a8ca9e4ad776b996cba0748242d2f764d4de19", "sha256": "8f450337df8bb4a51edfbce0aa79c76afdc8f550c2ace3710175ecee59b6a27b" }, "dob": { "date": "1974-04-04T22:25:46.000Z", "age": 48 }, "registered": { "date": "2021-08-14T08:42:14.407Z", "age": 1 }, "phone": "04-289-786", "cell": "042-381-81-43", "nat": "FI" }], "info": { "seed": "38da251006442a4a", "results": 1, "page": 1, "version": "1.4" } }
内容的提问来源于stack exchange,提问作者container
相关产品推荐
相关产品推荐

