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

如何为Google Cloud Identity API添加异常处理以跳过无效群组

问题描述

调用Google Cloud Identity API遍历组织群组获取成员详情时,遇到如下403错误:

return (<HttpError 403 when requesting https://cloudidentity.googleapis.com/v1/groups/040ew0vw43lra72/memberships?view=FULL&alt=json returned "Error(2028): Permission denied for resource groups/040ew0vw43lra72 (or it may not exist).". Details: "Error(2028): Permission denied for resource groups/040ew0vw43lra72 (or it may not exist).">
)

该群组由组织群组列表API返回,但在Google Groups UI中无法查询到。当前代码的异常捕获逻辑会导致整个任务失败,需修改方法使其遇到无效群组时跳过当前迭代,继续处理后续群组。

原代码如下:

def get_membership_data(service, all_group_df):
    all_member_df = pd.DataFrame()


    try:
        for inx, group in all_group_df.iterrows():
            print(f'Membership details for group {group["name"]}:')
            members = (
                service.groups()
                .memberships()
                .list(parent=group["name"], view="FULL")
                .execute()
            )

            if "memberships" in members:
                for member in members["memberships"]:
                    members_df = pd.DataFrame(index=[6])

                    y = json.dumps(member["preferredMemberKey"])
                    z = json.loads(y)
                    members_df.insert(0, "preferredMemberKey", z["id"])
                    ##print(z['id'])

                    members_df.insert(1, "createTime", member["createTime"])
                    members_df.insert(2, "updateTime", member["updateTime"])
                    members_df.insert(3, "name", group["name"])

                    a = json.dumps(group["groupKey"])
                    b = json.loads(a)
                    members_df.insert(4, "groupKey", b["id"])
                    ##print(b['id'])

                    members_df.insert(5, "displayName", group["displayName"])

                    all_member_df = pd.concat(
                        [all_member_df, members_df], ignore_index=True
                    )

            else:
                print("No 'memberships' key found in the API response")
                
    except Exception as exc:
        print(exc)
        return all_member_df
解决方案

核心问题是异常捕获逻辑被放在了循环外层,单个群组抛出异常会直接终止整个方法。需将异常捕获移至循环内部,针对每个群组的API请求单独处理,确保单个群组失败不影响后续任务。

修改后的代码:

import json
import pandas as pd

def get_membership_data(service, all_group_df):
    all_member_df = pd.DataFrame()

    for inx, group in all_group_df.iterrows():
        group_name = group["name"]
        print(f'Membership details for group {group_name}:')
        try:
            # 针对单个群组的API请求单独捕获异常
            members = (
                service.groups()
                .memberships()
                .list(parent=group_name, view="FULL")
                .execute()
            )

            if "memberships" in members:
                for member in members["memberships"]:
                    # 优化:无需json序列化再反序列化,直接访问字典键值
                    preferred_member_id = member["preferredMemberKey"]["id"]
                    group_key_id = group["groupKey"]["id"]
                    
                    # 简化DataFrame创建逻辑
                    member_data = {
                        "preferredMemberKey": preferred_member_id,
                        "createTime": member["createTime"],
                        "updateTime": member["updateTime"],
                        "name": group_name,
                        "groupKey": group_key_id,
                        "displayName": group["displayName"]
                    }
                    members_df = pd.DataFrame([member_data])
                    
                    all_member_df = pd.concat([all_member_df, members_df], ignore_index=True)
            else:
                print(f"No 'memberships' key found in response for group {group_name}")
                
        except Exception as exc:
            # 捕获异常后打印信息,直接进入下一次循环
            print(f"Failed to process group {group_name}: {exc}")
            continue

    return all_member_df

关键修改说明:

  • 将try-except移至循环内部,确保单个群组的异常不会终止整个任务
  • 添加continue语句,捕获异常后跳过当前群组,继续处理下一个
  • 移除冗余的json.dumps+json.loads操作,直接通过字典键访问值,提升代码效率
  • 简化DataFrame创建方式,用字典直接生成单行数据,替代多次insert操作,增强可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:32:06