
# 获取错误码
调用EMS接口时，需要对EmsExcepiton异常进行捕获，并根据异常中不同错误码进行不同策略处理。
#### 功能介绍
EMS捕获到接口异常，可以通过接口获取异常状态码。
#### 方法定义
```
EmsExcepiton.status_code()
```
常见的状态码及其含义：
| EMS异常状态码             | 描述     | 常见原因                                                                                                                                                                                                                                                                                                                                       | 解决方法                             |
|:---|:---|:---|:---|
| EMS_INVALID_ARGUMENT | 请求参数错误 | - 请求参数不合法。                                                                                                                                                      | 检查参数，修改后重试。                      |
| EMS_IO_ERROR         | 请求IO错误 | - EMS内存池故障。  - SDK到EMS内存池连接断开。                | 将EMS服务隔离，待健康检查通过后恢复。             |
| EMS_IO_TIMEOUT       | 请求IO超时 | - EMS内存池IO压力较大，业务繁忙。  - SDK业务压力大，导致IO排队时间久。   | 增加超时时间后重试，或者将EMS服务隔离，待健康检查通过后恢复。 |
| EMS_INTERNAL_ERROR   | 内部错误   | - SDK内部故障。  - 访问加速卡内存故障。                      | 将EMS服务隔离，待健康检查通过后恢复。             |
   
#### 代码样例
本示例用于获取异常错误码为超时，进行重试 。
```
import os 
import time 
import torch, torch_npu 
from ems import Ems, EmsConfig, EmsException, CcConfig_v1, CcKvOption 
from ems.common.exception import EmsErrorCode 
# 初始化cc配置 
cc_config = CcConfig_v1(rank_id=8, device_id=0, model_id="llama2-13b") 
# 初始化Ems 
config = EmsConfig(cc_config_v1=cc_config) 
try: 
    Ems.init(config) 
except EmsException as e: 
    print(f"exception: {e}.") 
    exit(1) 
# 获取context caching对象 
cc = Ems.get_cc() 
if cc is None: 
    print("cc is None.") 
    exit(1) 
# 设置save请求的超时时间 
option = CcKvOption(timeout=100) 
 # slot_mapping语义下的保存和加载显存数据，参数：slot_mapping + hashes + offsets
block_size = 4
# 组成参数列表 
slot_mapping = [0, 1, 2, 3, 4, 5] 
hashes = [0x1111, 0x2222] 
offsets = [4, 4]  
# 支持超时重试。 
retries = 0 
while True: 
    try: 
        result = cc.load(slot_mapping, hashes, offsets, option) 
        break 
    except EmsException as e: 
        if e.status_code() != EmsErrorCode.EMS_IO_TIMEOUT or retries >= 3: 
            print(f"failed to load cause unrecoverable error or retries is more than 3:  {e.status_code()}.") 
            exit(2) 
        else: 
            # 增加超时时间，并睡眠10ms后重试 
            option.timeout = 1000 
            time.sleep(0.01) 
            print(f"retry after sleep 10ms.") 
print(f"load result: {result}")
```
