跳转至

Exception API

qqmusic_api.core.exceptions

统一异常定义模块.

BaseApiException

BaseApiException(message: str)

Bases: Exception

异常基类.

Source code in qqmusic_api/core/exceptions.py
def __init__(self, message: str):
    super().__init__(message)
    self.message = message

CredentialInvalidError

CredentialInvalidError(message: str)

Bases: BaseApiException

发起请求前凭证缺失或格式损坏.

Source code in qqmusic_api/core/exceptions.py
def __init__(self, message: str):
    super().__init__(message)
    self.message = message

NetworkError

NetworkError(message: str)

Bases: BaseApiException

网络异常, 如断网或连接超时.

Source code in qqmusic_api/core/exceptions.py
def __init__(self, message: str):
    super().__init__(message)
    self.message = message

HTTPError

HTTPError(message: str, status_code: int)

Bases: BaseApiException

HTTP 请求状态码异常.

Source code in qqmusic_api/core/exceptions.py
def __init__(self, message: str, status_code: int):
    super().__init__(f"HTTP {status_code}: {message}")
    self.status_code = status_code

ApiDataError

ApiDataError(message: str, data: Any = None)

Bases: BaseApiException

API 响应载荷解析失败或关键数据缺失.

Source code in qqmusic_api/core/exceptions.py
def __init__(self, message: str, data: Any = None):
    super().__init__(f"API Data Error: {message}")
    self.data = data

ApiException

ApiException(
    message: str, *, code: int = -1, data: Any = None
)

Bases: BaseApiException

API 业务异常抽象基类.

Source code in qqmusic_api/core/exceptions.py
def __init__(self, message: str, *, code: int = -1, data: Any = None):
    super().__init__(message)
    self.code = code
    self.data = data

GlobalApiError

GlobalApiError(
    message: str | None = None,
    *,
    code: int,
    data: Any = None,
)

Bases: ApiException

全局网关拦截错误.

Source code in qqmusic_api/core/exceptions.py
def __init__(self, message: str | None = None, *, code: int, data: Any = None):
    super().__init__(message or f"请求被网关拒绝 (code={code})", code=code, data=data)

CgiApiException

CgiApiException(
    message: str | None = None,
    *,
    code: int,
    data: Any = None,
)

Bases: ApiException

单项 CGI 业务异常抽象基类.

Source code in qqmusic_api/core/exceptions.py
def __init__(
    self,
    message: str | None = None,
    *,
    code: int,
    data: Any = None,
):
    super().__init__(message or f"CGI 请求错误 (code={code})", code=code, data=data)

CredentialExpiredError

CredentialExpiredError(
    message: str = "登录凭证已过期, 请重新登录",
    *,
    code: int,
    data: Any = None,
)

Bases: CgiApiException

服务端拦截的凭证过期.

Source code in qqmusic_api/core/exceptions.py
def __init__(
    self,
    message: str = "登录凭证已过期, 请重新登录",
    *,
    code: int,
    data: Any = None,
):
    super().__init__(message, code=code, data=data)

CredentialRefreshError

CredentialRefreshError(
    message: str = "登录凭证刷新失败",
    *,
    code: int,
    data: Any = None,
)

Bases: CgiApiException

凭证刷新失败.

Source code in qqmusic_api/core/exceptions.py
def __init__(
    self,
    message: str = "登录凭证刷新失败",
    *,
    code: int,
    data: Any = None,
):
    super().__init__(message, code=code, data=data)

RatelimitedError

RatelimitedError(
    message: str = "触发风控, 需登录或者安全验证",
    *,
    code: int,
    data: Any = None,
)

Bases: CgiApiException

触发风控或请求频率限制.

Source code in qqmusic_api/core/exceptions.py
def __init__(
    self,
    message: str = "触发风控, 需登录或者安全验证",
    *,
    code: int,
    data: Any = None,
):
    super().__init__(message, code=code, data=data)
    self.feedback_url = data.get("feedbackURL") if isinstance(data, dict) else None

LoginError

LoginError(
    message: str = "登录失败",
    *,
    code: int,
    data: Any = None,
)

Bases: CgiApiException

登录域专属业务异常.

已知错误码
  • 1000 / 104401 / 104400: 登录鉴权参数无效或已过期 → LoginAuthExpiredError
  • 20261: 登录参数错误
  • 20271: 验证码错误
  • 20272: 账号绑定异常
  • 20274: 账号绑定缺失
  • 20277 / 20278: 账号受限 → LoginAccountRestrictedError
  • 20279: 登录设备超限 → LoginDeviceLimitError
  • 20450: 账号已被封禁 → LoginAccountRestrictedError
  • 104604: 操作过于频繁 → LoginRateLimitError
Source code in qqmusic_api/core/exceptions.py
def __init__(
    self,
    message: str = "登录失败",
    *,
    code: int,
    data: Any = None,
):
    super().__init__(message, code=code, data=data)

LoginAuthExpiredError

LoginAuthExpiredError(
    message: str = "登录鉴权参数无效或已过期",
    *,
    code: int,
    data: Any = None,
)

Bases: LoginError

登录鉴权参数无效或已过期.

Source code in qqmusic_api/core/exceptions.py
def __init__(
    self,
    message: str = "登录鉴权参数无效或已过期",
    *,
    code: int,
    data: Any = None,
):
    super().__init__(message, code=code, data=data)

LoginDeviceLimitError

LoginDeviceLimitError(
    message: str = "登录设备超限",
    *,
    code: int,
    data: Any = None,
)

Bases: LoginError

登录设备数量超限.

Source code in qqmusic_api/core/exceptions.py
def __init__(
    self,
    message: str = "登录设备超限",
    *,
    code: int,
    data: Any = None,
):
    super().__init__(message, code=code, data=data)

LoginAccountRestrictedError

LoginAccountRestrictedError(
    message: str = "账号受限",
    *,
    code: int,
    data: Any = None,
)

Bases: LoginError

账号受限或已被封禁.

Source code in qqmusic_api/core/exceptions.py
def __init__(
    self,
    message: str = "账号受限",
    *,
    code: int,
    data: Any = None,
):
    super().__init__(message, code=code, data=data)

LoginRateLimitError

LoginRateLimitError(
    message: str = "操作过于频繁",
    *,
    code: int,
    data: Any = None,
)

Bases: LoginError

登录操作过于频繁.

Source code in qqmusic_api/core/exceptions.py
def __init__(
    self,
    message: str = "操作过于频繁",
    *,
    code: int,
    data: Any = None,
):
    super().__init__(message, code=code, data=data)