You need to enable JavaScript to run this app. Twitter天气机器人触发TypeError: bool不可下标报错原因
优惠活动
大模型
产品
解决方案
定价
更多

Twitter天气机器人触发TypeError: bool不可下标报错原因

报错原因与修正方案

报错触发位置

报错完全来自get_location函数里的这行代码:

tweet_location = [i.strip("#") for i in tweet.split() if i.startswith("#")[0]]
  • Python的字符串startswith()方法执行后返回布尔值(True/False),本身不支持下标索引。你在方法调用的结果后面直接加[0],相当于对布尔值做取字符操作,直接触发TypeError: 'bool' object is not subscriptable。
  • 这个写法本身是冗余的:startswith("#")的作用就是判断字符串是否以#开头,完全不需要额外加[0]来做判断。

修正步骤

  1. 删掉过滤条件里多余的[0],把判断逻辑改成正确的写法:if i.startswith("#")
  2. 解决列表无法直接拼接字符串的问题:原代码里tweet_location是列表类型,直接用+= " today weather.com"拼接字符串会触发类型错误,需要先把提取到的标签内容转成空格分隔的字符串,再拼搜索词。

修正后的get_location函数参考:

def get_location(tweet):
    # 提取所有带#的话题,去掉#前缀
    location_tags = [word.lstrip("#") for word in tweet.split() if word.startswith("#")]
    # 无有效标签时直接返回空值
    if not location_tags:
        return ""
    search_query = f"{' '.join(location_tags)} today weather.com"
    return search_query

额外需要优化的逻辑

  • 现在的代码只要推文里带任意#就会触发查询,没有判断提取到的标签是否为有效位置信息。如果get_location返回空字符串,要直接跳过后续的天气查询、发推流程,避免调用无效接口。
  • get_weather函数里的url变量是在搜索循环内部定义的,如果搜索没返回有效结果,后续构造请求时会出现变量未定义的报错,可以在循环外初始化url为空值,加判空后再执行网页抓取逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 16:36:01