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

如何用PyGithub取消关注粉丝?遭遇404错误求解决方案

问题描述

我想写一个只关注组织、取消所有关注我的用户的程序,用PyGithub写了以下代码,却触发了404错误(github.GithubException.UnknownObjectException),请帮忙解决。

代码如下:

from github import Github, Auth
print("正在验证身份...")
auth = Auth.Token("我的私有令牌")
g = Github(auth=auth)
print("获取关注者列表...")
user = g.get_user()
followers = []

for follower in user.get_followers():
    followers.append(follower)
print(f"INFO: 获取到 {len(followers)} 个关注者。\n\n检查你是否关注了这些关注者...")
num = 0
for follow in user.get_following():
    if follow in followers:
        user.remove_from_following(follow)
        print(f"已取消关注: {follow.login}")
        num += 1

print(f"找到 {num} 个你关注且同时关注你的用户。")

错误信息:

github.GithubException.UnknownObjectException: 404 {"message": "未找到", "documentation_url": "https://docs.github.com/rest/users/followers#unfollow-a-user", "status": "404"}

问题分析与解决办法

错误原因

触发404的核心原因有三个:

  1. 令牌权限不足:私有令牌没有获取/修改关注列表的权限,导致API调用被拒绝。
  2. 对象比较逻辑失效:直接用User实例做in判断,可能因为实例内存地址不同(即使对应同一个用户)导致误判,尝试取消关注实际未关注的用户。
  3. 潜在的组织操作:虽然组织不会出现在关注者列表中,但如果循环时误触组织,remove_from_following仅支持取消关注个人用户,操作组织会返回404。

修正后的代码

from github import Github, Auth, GithubException

print("正在验证身份...")
# 替换为你的私有令牌
auth = Auth.Token("我的私有令牌")
g = Github(auth=auth)
print("获取关注者列表...")
user = g.get_user()

# 存储关注者的login,避免实例比较的问题
followers_logins = [follower.login for follower in user.get_followers()]
print(f"INFO: 获取到 {len(followers_logins)} 个关注者。")

print("\n检查并取消关注互关的个人用户...")
num = 0
# 遍历当前关注的对象
for follow in user.get_following():
    # 如果是组织,直接跳过(保留关注)
    if follow.type == 'Organization':
        continue
    # 仅取消关注那些同时关注你的个人用户
    if follow.login in followers_logins:
        try:
            user.remove_from_following(follow)
            print(f"已取消关注: {follow.login}")
            num += 1
        except GithubException as e:
            print(f"取消关注 {follow.login} 失败: {e}")

print(f"共取消关注 {num} 个互关的个人用户。")

关键修正点

  • 权限检查:创建令牌时,必须勾选read:user和write:user权限(对应关注列表的读写权限)。
  • 改用login比较:用用户的login字符串代替User实例做判断,彻底解决实例对象不相等的问题。
  • 过滤组织:明确跳过组织类型的关注对象,完全符合"仅关注组织"的需求。
  • 异常捕获:处理可能的API异常,避免单个操作失败导致程序直接终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:15:08