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

TypeError:'Post'对象不可下标访问问题排查求助

解决 TypeError: 'Post' object is not subscriptable 问题

我之前也碰到过类似第三方库返回自定义类实例而非字典的情况,给你梳理下问题根源和解决办法:

问题原因

moesearch.search() 返回的结果序列里,每个元素都是库自定义的 Post 类实例,不是原生Python字典。这就是为什么你用字典下标 ['timestamp'] 访问会报错,而且直接调用 dict() 转换也失败——这个类没有实现支持直接转字典的接口。

解决方案

1. 直接访问对象属性(最推荐)

查看moesearch的源码就能发现,Post 类已经把你需要的字段封装成了实例属性,直接用点语法 . 访问就行:

修改你的循环代码如下:

def Dumpster_Fire_Parser():
    import moesearch
    import pandas as pd

    trash = moesearch.search(
        archiver_url="https://archive.4plebs.org",
        board="pol",
        filter="image",
        deleted="not-deleted",
    )

    time_dumpster_dict = {}
    country_dumpster_dict = {}

    for post in trash:
        # 直接访问Post实例的属性
        time_stamp = post.timestamp
        comment = post.comment
        country = post.poster_country_name
        
        time_dumpster_dict[time_stamp] = comment
        country_dumpster_dict[time_stamp] = country

    export_frame = pd.DataFrame([time_dumpster_dict, country_dumpster_dict]).T
    export_frame.columns = ['d{}'.format(i) for i, col in enumerate(export_frame, 1)]
    print(export_frame)
    return export_frame

如果你不确定 Post 有哪些可用属性,可以在循环里加一行 print(dir(post)),会列出该实例的所有属性和方法。

2. 转换为字典(如果需要字典格式)

如果后续操作必须用字典,可以访问实例的 __dict__ 属性,它会返回存储实例属性的字典(注意可能包含一些以_开头的私有属性,按需过滤即可):

for post in trash:
    post_dict = post.__dict__
    # 提取需要的字段
    time_stamp = post_dict['timestamp']
    comment = post_dict['comment']
    country = post_dict['poster_country_name']
    # 后续操作...

另外,你可以检查下moesearch的 Post 类有没有提供官方的转字典方法(比如 to_dict()),如果有的话优先用官方方法,比直接用 __dict__ 更稳妥。

额外提醒

记得遵守API的请求限制(每分钟5次),可以在代码里加个简单的延迟,避免触发限制哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:12:36