异常处理

所有的 ARKID Client 错误都继承自 ArkIDError, 所有 SDK 错误类型均可从 arkid_client 导入。 因此,您可以通过 ArkIDError 来捕获 ARKID Client 抛出的*所有*错误, 例如

import logging
from arkid_client import UserClient, ArkIDError

try:
    uc = UserClient(...)
    # create with no parameters will throw an exception
    user = uc.create_user()
except ArkIDError:
    logging.exception("ArkID Error!")
    raise

在大多数情况下,最好查找 ArkIDError 的特定子类。 比如,想要区分网络故障和意外的 API 条件, 您需要通过 NetworkErrorArkIDAPIError 来定位问题所在:

import logging
from arkid_client import (UserClient,
                          ArkIDError, ArkIDAPIError, NetworkError)

try:
    uc = UserClient(...)
    users = uc.query_user()

    for user in users:
        print(user['name'])

    ...
except ArkIDAPIError as e:
    # Error response from the REST service, check the code and message for details.
    logging.error(("Got a ArkID API Error\n"
                   "Error Code: {}\n"
                   "Error Message: {}").format(e.code, e.message))
    raise e
except NetworkError:
    logging.error(("Network Failure. "
                   "Possibly a firewall or connectivity issue"))
    raise
except ArkIDError:
    logging.exception("Totally unexpected ArkIDError!")
    raise
else:
    ...

当然,如果您想要了解更多关于响应的信息,您要做的不仅仅只有这些。

由 ArkID SDK 引起的所有错误都应该是 ArkIDError 的实例。 对 ArkID Client 方法的错误调用通常会引发 ArkIDSDKUsageError , 但是,在极少数情况下,可能会引发标准的 python 异常( ValueError , OSError 等)

错误类型

class arkid_client.ArkIDError[源代码]

基类:Exception

ArkID Client 错误的基类

class arkid_client.ArkIDSDKUsageError[源代码]

基类:arkid_client.exceptions.ArkIDError, ValueError

当 ArkID Client 检测到它被不正确的使用时会抛出 ArkIDSDKUsageError 异常, 这些错误通常表示某些关于 ArkID Client 使用的规范(例如所需的操作顺序)已被违反。

class arkid_client.ArkIDAPIError(response, *args, **kwargs)[源代码]

基类:arkid_client.exceptions.ArkIDError

封装 REST API 的响应信息

变量:
  • http_status – HTTP 响应的状态码 (int)
  • message – 来自 API 的错误信息。一般来说,其对开发人员是有用的, 但在某些情况下它也许适合显示给终端用户。
raw_json

获取从 ArkID API 接收到的响应信息,尝试以 JSON 格式解析数据, 并转化为 dict 。

如果响应信息无法通过 JSON 格式加载, 则返回 None 。

raw_text

以 string 形式获取响应信息。

class arkid_client.AuthAPIError(response, *args, **kwargs)[源代码]

基类:arkid_client.exceptions.ArkIDAPIError

认证服务客户端的错误类型,继承了 message 变量

class arkid_client.exceptions.UserAPIError(response)[源代码]

基类:arkid_client.exceptions.ArkIDAPIError

用户服务客户端的错误类型,继承了 message 变量

class arkid_client.exceptions.OrgAPIError(response)[源代码]

基类:arkid_client.exceptions.ArkIDAPIError

组织服务客户端的错误类型,继承了 message 变量

class arkid_client.exceptions.NodeAPIError(response)[源代码]

基类:arkid_client.exceptions.ArkIDAPIError

节点服务客户端的错误类型,继承了 message 变量

class arkid_client.NetworkError(message, exception, *args, **kwargs)[源代码]

基类:arkid_client.exceptions.ArkIDError

当与 ArkID 服务通信发生错误时会抛出 NetworkError 错误, 其为通信方面出现的错误的基类。 其在保留原始异常数据的基础上,也可以接受其他一些有用的消息, 方便用户明确错误所在。

class arkid_client.ArkIDConnectionError(message, exception, *args, **kwargs)[源代码]

基类:arkid_client.exceptions.NetworkError

在发出 REST 请求时发生连接错误。

class arkid_client.ArkIDTimeoutError(message, exception, *args, **kwargs)[源代码]

基类:arkid_client.exceptions.NetworkError

REST API 请求超时

class arkid_client.ArkIDConnectionTimeoutError(message, exception, *args, **kwargs)[源代码]

基类:arkid_client.exceptions.ArkIDTimeoutError

请求在连接建立期间超时,这些错误可以进行安全地重试。