Files
chan.py/Common/ChanException.py
T
2025-06-10 01:16:09 +08:00

89 lines
2.2 KiB
Python

from enum import IntEnum
class ErrCode(IntEnum):
# chan err
_CHAN_ERR_BEGIN = 0
COMMON_ERROR = 1
SRC_DATA_NOT_FOUND = 3
SRC_DATA_TYPE_ERR = 4
PARA_ERROR = 5
EXTRA_KLU_ERR = 6
SEG_END_VALUE_ERR = 7
SEG_EIGEN_ERR = 8
BI_ERR = 9
COMBINER_ERR = 10
PLOT_ERR = 11
MODEL_ERROR = 12
SEG_LEN_ERR = 13
ENV_CONF_ERR = 14
UNKNOWN_DB_TYPE = 15
FEATURE_ERROR = 16
CONFIG_ERROR = 17
SRC_DATA_FORMAT_ERROR = 18
_CHAN_ERR_END = 99
# Trade Error
_TRADE_ERR_BEGIN = 100
SIGNAL_EXISTED = 101
RECORD_NOT_EXIST = 102
RECORD_ALREADY_OPENED = 103
QUOTA_NOT_ENOUGH = 104
RECORD_NOT_OPENED = 105
TRADE_UNLOCK_FAIL = 106
PLACE_ORDER_FAIL = 107
LIST_ORDER_FAIL = 108
CANDEL_ORDER_FAIL = 109
GET_FUTU_PRICE_FAIL = 110
GET_FUTU_LOT_SIZE_FAIL = 111
OPEN_RECORD_NOT_WATCHING = 112
GET_HOLDING_QTY_FAIL = 113
RECORD_CLOSED = 114
REQUEST_TRADING_DAYS_FAIL = 115
COVER_ORDER_ID_NOT_UNIQUE = 116
SIGNAL_TRADED = 117
_TRADE_ERR_END = 199
# KL data Error
_KL_ERR_BEGIN = 200
PRICE_BELOW_ZERO = 201
KL_DATA_NOT_ALIGN = 202
KL_DATA_INVALID = 203
KL_TIME_INCONSISTENT = 204
TRADEINFO_TOO_MUCH_ZERO = 205
KL_NOT_MONOTONOUS = 206
SNAPSHOT_ERR = 207
SUSPENSION = 208 # 疑似停牌
STOCK_IPO_TOO_LATE = 209
NO_DATA = 210
STOCK_NOT_ACTIVE = 211
STOCK_PRICE_NOT_ACTIVE = 212
_KL_ERR_END = 299
class CChanException(Exception):
def __init__(self, message, code=ErrCode.COMMON_ERROR):
self.errcode = code
self.msg = message
Exception.__init__(self, message)
def is_kldata_err(self):
return ErrCode._KL_ERR_BEGIN < self.errcode < ErrCode._KL_ERR_END
def is_chan_err(self):
return ErrCode._CHAN_ERR_BEGIN < self.errcode < ErrCode._CHAN_ERR_END
if __name__ == "__main__":
def foo():
raise CChanException("XXX", ErrCode.CONFIG_ERROR)
try:
foo()
except CChanException as e:
print(str(e.errcode))
# python3.8 结果为: ErrCode.CONFIG_ERROR
# python3.11 结果为:17
print(e.errcode.name, type(e.errcode.name))