跳转至

错误处理

异常层级

BaseApiException
├── CredentialInvalidError    # 凭证缺失或格式损坏
├── NetworkError              # 网络异常 (断网、超时)
├── HTTPError                 # HTTP 状态码异常 (含 status_code 属性)
├── ApiDataError              # 响应解析失败
└── ApiException              # 业务异常基类 (含 code 属性)
    ├── GlobalApiError        # 网关级错误
    └── CgiApiException       # 单项 CGI 错误
        ├── CredentialExpiredError   # 凭证过期 (code: 1000/104401/104400)
        ├── CredentialRefreshError   # 凭证刷新失败
        ├── RatelimitedError         # 触发风控 (含 feedback_url 属性)
        └── LoginError               # 登录域错误

基本用法

大多数场景只需捕获 BaseApiException

from qqmusic_api import Client, BaseApiException

async with Client() as client:
    try:
        result = await client.search.search_by_type("周杰伦")
    except BaseApiException as e:
        print(f"请求失败: {e}")

分场景处理

如需针对特定错误类型执行不同逻辑:

from qqmusic_api import (
    Client,
    CredentialExpiredError,
    NetworkError,
    RatelimitedError,
)

async with Client() as client:
    try:
        result = await client.song.get_song_urls(...)
    except CredentialExpiredError:
        # 重新登录或刷新凭证
        ...
    except RatelimitedError as e:
        # e.feedback_url 可用于引导用户完成安全验证
        ...
    except NetworkError:
        # 网络不可用,稍后重试
        ...

常见异常说明

异常 触发场景 建议处理方式
CredentialInvalidError 调用需登录的接口但未提供凭证 传入有效的 Credential
NetworkError 断网、DNS 解析失败、连接超时 稍后重试
HTTPError 服务端返回非 200 状态码 检查请求地址或重试
CredentialExpiredError musickey 过期 调用 refresh_credential 或重新登录
RatelimitedError 触发风控 引导用户完成 feedback_url 中的安全验证
LoginError 登录参数错误、验证码错误、账号受限等 检查登录参数或更换登录方式