import sys
import traceback


class MacValidateError(Exception):
    pass


class TokenMissingError(Exception):
    pass


def trace_detail_info(err):
    error_class = err.__class__.__name__  # 取得錯誤類型
    detail = err.args[0]  # 取得詳細內容
    _, _, tb = sys.exc_info()  # 取得Call Stack
    lastCallStack = traceback.extract_tb(tb)[-1]  # 取得Call Stack的最後一筆資料
    fileName = lastCallStack[0]  # 取得發生的檔案名稱
    lineNum = lastCallStack[1]  # 取得發生的行號
    funcName = lastCallStack[2]  # 取得發生的函數名稱
    errMsg = f"File \"{fileName}\", line {lineNum}, in {funcName}: [{error_class}] {detail}"
    return errMsg
