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

为Google Home编写TTS脚本时遭遇AttributeError错误的解决求助

解决Google Home TTS脚本的AttributeError问题

嘿,我懂你现在卡在哪了——给Google Home写TTS脚本时碰到了AttributeError: 'list' object has no attribute 'device'的报错,我来帮你捋清楚怎么修复这个问题。

问题根源

这个错误其实是在告诉你:你遍历的列表里,某个元素本身是个列表,而不是你预期的Chromecast设备对象,所以当你试图访问它的device属性时自然就报错了。大概率是pychromecast.get_chromecasts()的返回值结构和你想的不一样:

  • 旧版本的pychromecast里,这个方法直接返回设备对象的列表;
  • 新版本里它返回的是一个CastBrowser实例,真正的设备列表藏在它的devices属性里;
  • 少数情况下,还可能返回嵌套的列表结构,导致遍历到子列表时出错。

修复代码

这里给你两种针对性的修复方案,你可以根据自己的pychromecast版本来选:

方案1:适配新版本pychromecast(推荐)

如果你的pychromecast版本是10.0及以上,修改获取设备列表的代码:

# 获取CastBrowser对象,再从中提取设备列表
browser = pychromecast.get_chromecasts()
CastDevice = browser.devices

# 找到目标设备,同时处理找不到设备的情况
cast = next((cc for cc in CastDevice if cc.device.friendly_name == 'Rum'), None)
if not cast:
    print("找不到名为'Rum'的Google Home设备,请检查设备名称是否正确")
    exit()

cast.wait()
media = cast.media_controller
media.play_media(r.url, content_type='audio/mp3')
media.block_until_active()
media.play()

方案2:处理嵌套列表的情况

如果你的get_chromecasts()返回的是嵌套列表,先把它扁平化:

CastDevice = pychromecast.get_chromecasts()
# 扁平化列表,确保每个元素都是设备对象
flat_devices = []
for item in CastDevice:
    if isinstance(item, list):
        flat_devices.extend(item)
    else:
        flat_devices.append(item)

# 查找目标设备
cast = next((cc for cc in flat_devices if cc.device.friendly_name == 'Rum'), None)
if not cast:
    print("找不到名为'Rum'的设备")
    exit()

cast.wait()
media = cast.media_controller
media.play_media(r.url, content_type='audio/mp3')
media.block_until_active()
media.play()

额外提示

  • 先确认你的Google Home设备名称确实是'Rum',大小写要完全匹配;
  • 运行脚本前,确保电脑和Google Home在同一个局域网里;
  • 可以先打印CastDevice的内容,看看它的结构到底是什么,方便排查问题:print(CastDevice)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:59:08