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
相关产品推荐
相关产品推荐

