from typing import Any, Dict


_未提供 = object()

def 取值_必填(
    数据: Dict[str, Any],
    键: Any,
    默认值: Any = None,
    失败标记: Any = _未提供
) -> Any:
    """获取指定键的值；若键不存在，则返回默认值或指定失败标记。

    功能说明:
        - 这个函数用于获取指定键的值；若键不存在，则返回默认值或指定失败标记。
        - 它把字典里的常见操作单独封装好了，调用时不用自己反复写判断逻辑。
        - 当输入不符合要求时，函数会返回约定好的兜底结果，避免程序因为异常中断。

    Args:
        数据 (dict): 用于取值的字典对象。
        键: 要读取的键，内部将转换为字符串。
        默认值: 当取值失败且未提供失败标记时返回的值，默认为 None。
        失败标记: 当取值失败时优先返回的专用标记。
        - 示例： "字段缺失"
        - 示例： False

    Returns:
        Any:
        - 成功：返回字典中对应键的值；
        - 失败：返回失败标记或默认值。"""
    try:
        if not isinstance(数据, dict):
            return 默认值 if 失败标记 is _未提供 else 失败标记

        键名 = str(键)
        if 键名 in 数据:
            return 数据[键名]

        return 默认值 if 失败标记 is _未提供 else 失败标记
    except Exception:
        return 默认值 if 失败标记 is _未提供 else 失败标记


if __name__ == "__main__":
    print("===== 示例1：基础用法 =====")
    数据 = {"名称": "zfx", "年龄": 18, "城市": "上海"}
    键 = "名称"
    默认值 = "默认值"
    失败标记 = "缺失"
    print("结果:", 取值_必填(数据, 键, 默认值, 失败标记))
    print("数据:", 数据)

    print("\n===== 示例2：常见变体 =====")
    数据 = {"name": "zfx", "phone": None, "items": [1, 2]}
    键 = "name"
    默认值 = "未找到"
    失败标记 = False
    print("结果:", 取值_必填(数据, 键, 默认值, 失败标记))
    print("数据:", 数据)

    print("\n===== 示例3：边界情况 =====")
    数据 = {}
    键 = "不存在"
    默认值 = "空"
    失败标记 = "失败"
    print("结果:", 取值_必填(数据, 键, 默认值, 失败标记))
    print("数据:", 数据)

    print("\n===== 示例4：异常情况 =====")
    数据 = []
    键 = "名称"
    默认值 = "失败"
    失败标记 = "参数错误"
    print("结果:", 取值_必填(数据, 键, 默认值, 失败标记))
    print("数据:", 数据)

    print("\n===== 示例5：特殊值情况 =====")
    数据 = {"名称": "", "备注": None, "标签": []}
    键 = "备注"
    默认值 = 0
    失败标记 = "未命中"
    print("结果:", 取值_必填(数据, 键, 默认值, 失败标记))
    print("数据:", 数据)

    print("\n===== 示例6：应用场景-整理业务字典 =====")
    数据 = {"订单号": "A001", "状态": "待发货", "数量": 3}
    键 = "状态"
    默认值 = "未知状态"
    失败标记 = "字段缺失"
    print("结果:", 取值_必填(数据, 键, 默认值, 失败标记))
    print("数据:", 数据)
