Python运行报'TypeError: 'NoneType' object is not subscriptable'如何解决
错误原因排查
TypeError: 'NoneType' object is not subscriptable 错误本质是你尝试对None值使用[]语法取下标/属性,你的代码中有两处可能触发该错误的场景:
- 未做请求状态校验就直接调用
.json()获取结果:如果接口返回4xx/5xx错误、响应内容不是合法JSON、或接口直接返回null,会导致变量r为None,执行r['assets']时就会报错。 - 嵌套字段未做非空校验:你仅判断了
asset不为None,但没有校验下层字段,如果某条资产的creator为None,或creator下的user为None,执行asset['creator']['user']['username']时就会触发报错。
修复后的代码
import requests url2 = "https://xxx.xxxxxx.xx/xxx/xx/xxxxxx" querystring = {"order_direction":"desc","offset":"0","limit":"5000", "owner": "xxxxxxxxxxxxxxxxxxxxxxxx"} headers = { "Accept": "application/json", } # 先校验请求状态 resp = requests.get(url2, params=querystring, headers=headers) resp.raise_for_status() # 状态码异常时直接抛出对应错误,方便定位问题 r = resp.json() # 遍历逐层做非空校验 for asset in r.get('assets', []): if not asset: continue creator = asset.get('creator') if not creator: continue user = creator.get('user') if not user: continue print(user.get('username'))
排查技巧
如果修改后仍然有问题,可以先打印完整响应内容print(r),确认接口返回的结构是否符合你的预期,也可以在遍历asset时打印异常的资产数据,定位具体是哪条数据存在字段缺失。
内容的提问来源于stack exchange,提问作者real trappa
相关产品推荐
相关产品推荐

