Prcc321 2021-11-04 14:40 采纳率: 88.9%
浏览 77
已结题

请问Python捕获到Exception时怎么获取具体异常类型

请问Python捕获到Exception时怎么获取具体异常类型?
我现在有一个装饰器,来捕获异常写入日志,然后根据异常类型决定是否需要写入详细信息的日志,但我使用repr()获取的是字符串,只能截取内容来判断
请问可以直接获取到异常类型吗

def error_log():
    """
    异常捕获日记记录装饰器
    """

    def decorator(func):

        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            # 运行程序
            try:
                return func(*args, **kwargs)
            # 捕获异常
            except Exception as e:

                """查询异常类型是否需要记录详细信息"""
                # 记录详细信息默认True
                is_exc_info = True
                # 需要记录详细信息的异常类型
                is_exc_info_dict = {
                    'TestDataError',
                    'DataBaseConnectError'
                }
                if repr(e).split('(')[0] in is_exc_info_dict:
                    is_exc_info = True

                """记录日志"""
                # 记录异常日志
                ErrorLog().create_logger.exception(
                    msg=f'{func.__name__}:{e}',  # 日志内容 -> 方法名称:异常信息
                    exc_info=is_exc_info,  # 详细信息
                    extra={'status': 'Exception'}  # 额外参数属性
                )

                """抛出异常"""
                raise e

        return wrapper

    return decorator


  • 写回答

2条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-11-04 14:56
    关注

    这应该很容易吧,比如type函数,或者isinstance函数,都可以。示例代码:

    >>> import random
    >>> try:
        r = random.random()
        if r < 0.33:
            raise ValueError('值错误')
        elif r < 0.66:
            raise KeyError('键错误')
        else:
            raise AttributeError('属性错误')
    except Exception as e:
        print(type(e))
        if isinstance(e, ValueError):
            print('值错误')
        elif isinstance(e, KeyError):
            print('键错误')
        elif isinstance(e, AttributeError):
            print('属性错误')
        else:
            print('其他错误')
    
            
    <class 'ValueError'>
    值错误
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月12日
  • 已采纳回答 11月4日
  • 创建了问题 11月4日

悬赏问题

  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?