from typing import Any, Tuple


def 二维元组取第2列(元组数据: Tuple[Tuple[Any, ...], ...]):
    """提取二维元组中每行的第 2 列。

    Args:
        元组数据: 由多个子元组组成的二维元组。

    Returns:
        成功时返回提取后的新元组；失败时返回空元组 ``()``。
    """
    try:
        if not isinstance(元组数据, tuple):
            return ()
        结果 = []
        for 项 in 元组数据:
            if not isinstance(项, tuple) or len(项) < 2:
                return ()
            结果.append(项[1])
        return tuple(结果)
    except Exception:
        return ()


if __name__ == "__main__":
    print("===== 示例1：正常提取第2列 =====")
    数据 = (("张三", 18), ("李四", 20), ("王五", 22))
    print("结果:", 二维元组取第2列(数据))

    print("\n===== 示例2：列数不足 =====")
    数据 = (("张三",), ("李四", 20))
    print("结果:", 二维元组取第2列(数据))

    print("\n===== 示例3：数据不是元组 =====")
    数据 = [("张三", 18), ("李四", 20)]
    print("结果:", 二维元组取第2列(数据))

    print("\n===== 示例4：子元组长度大于2 =====")
    数据 = (("张三", 18, "开发"), ("李四", 20, "测试"))
    print("结果:", 二维元组取第2列(数据))

    print("\n===== 示例5：第2列成员类型不同 =====")
    数据 = (("a", 1), ("b", None), ("c", [1, 2]))
    print("结果:", 二维元组取第2列(数据))

    print("\n===== 示例6：应用场景-提取员工姓名列表 =====")
    员工数据 = (
        (1001, "张三", "技术部"),
        (1002, "李四", "销售部"),
        (1003, "王五", "财务部"),
    )
    print("结果:", 二维元组取第2列(员工数据))
