You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TMDBv3API获取电影ID时遭遇getattr() TypeError问题求解

解决TMDB API响应中访问'id'属性触发的TypeError问题

1. 修改代码处理TypeError并正确获取'id'

错误原因分析

你遇到的TypeError: getattr(): attribute name must be string,大概率是两种场景导致:

  • 调用getattr()时,第二个参数(属性名)不是字符串类型(比如传了非字符串变量)
  • TMDB v3 wrapper返回的响应是字典对象而非类实例,用getattr()访问字典键本身就不符合用法(字典应使用键索引或get()方法)

修正方案

场景1:响应为字典(TMDB wrapper常见返回格式)

直接用字典的get()方法安全获取id,同时避免KeyError:

# 假设response是API返回的字典结构
movie_id = response.get('id')
# 可选:设置默认值,防止id字段不存在时返回None
movie_id = response.get('id', None)

如果一定要兼容类实例场景,可先判断类型再选择访问方式:

if isinstance(response, dict):
    movie_id = response.get('id')
else:
    # 确保getattr的第二个参数是字符串常量
    movie_id = getattr(response, 'id', None)

场景2:捕获异常做兜底处理

用try-except块直接捕获错误,同时兼容不同响应结构:

try:
    # 优先尝试字典访问方式
    movie_id = response['id']
except (KeyError, TypeError):
    try:
        # 兼容类实例属性访问
        movie_id = getattr(response, 'id', None)
    except TypeError:
        # 兜底处理,比如记录日志或赋值默认值
        movie_id = None
        print("无法获取电影ID:响应结构异常")

2. 对响应对象添加的额外检查

为彻底避免同类错误,处理响应前必须做以下验证:

  • 检查响应类型:用isinstance(response, (dict, object))判断是字典还是类实例,避免用错访问方式
  • 验证响应完整性:检查响应是否为空(if not response:),或判断核心字段是否存在(字典用'id' in response,类实例用hasattr(response, 'id'))
  • 校验请求状态:通过wrapper返回的status_code确认请求成功(比如TMDB成功响应的状态码为200),避免处理错误响应
  • 类型校验:获取id后验证其类型为整数(电影ID为整数类型),防止后续逻辑出错:
    if movie_id is not None and isinstance(movie_id, int):
        # 执行正常业务逻辑
    else:
        print("电影ID格式无效")
    
  • 捕获请求阶段异常:提前捕获网络错误、认证失败等异常,避免无效响应进入后续处理流程

内容的提问来源于stack exchange,提问作者Dark Angel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:20:10