使用asyncpraw调用Reddit API遇await语法错误及后续问题求助
问题分析
- 第一个错误:
await关键字不能直接写在全局代码里,必须放在异步函数内部执行。你直接在全局作用域使用await reddit.subreddit(...),Python会提示await只能在异步函数中调用。 - 第二个错误:异步函数
getSubreddit()直接调用后返回的是协程对象,不是实际的Subreddit实例,必须用await获取结果,但await依然不能在全局使用,所以得把所有异步逻辑封装到一个异步函数里,再通过异步运行器触发执行。
正确代码示例
import asyncpraw import asyncio async def main(): reddit = asyncpraw.Reddit( client_id="CLIENT_ID", client_secret="CLIENT_SECRET", user_agent="USER_AGENT", ) print(reddit.read_only) subreddit = await reddit.subreddit("ProgrammerHumor") async for submission in subreddit.hot(limit=10): print(submission.title) await reddit.close() # 结束时关闭客户端连接,释放资源 if __name__ == "__main__": asyncio.run(main())
关键说明
- 所有异步操作都放到
main()这个异步函数里,保证await能正常工作。 - 用
asyncio.run(main())启动整个异步程序,这是Python 3.7+官方推荐的异步代码运行方式。 - 最后调用
await reddit.close(),避免遗留无效连接占用资源。
内容的提问来源于stack exchange,提问作者Abdulaziz Baba
相关产品推荐
相关产品推荐

