• Python 代码的异常处理和打印异常信息


    前言

    • Python的异常处理可以向用户准确反馈出错信息,所有异常都是基类Exception的子类。
      自定义异常都是从基类Exception中继承,Python自动将所有内建的异常放到内建命名空间中
      所以程序不必导入exceptions模块即可使用异常。
    • 需要查看详细的错误信息需导入import traceback模块

    捕获异常的方式

    方法一:捕获所有的异常

    try:
       1/0
    except Exception:
        print (Exception)
    """输出异常类<class 'Exception'>"""
    

    方法二:采用traceback模块查看异常,需要导入traceback模块,这个方法会打印出异常代码的行号

    try:
        1/0
    except:
        traceback.print_exc()
    """输出:
    Traceback (most recent call last):
      File "C:/Users/Administrator/Desktop/demo04.py", line 123, in <module>
        1/0
    ZeroDivisionError: division by zero
    """
    

    方法三:采用sys模块回溯最后的异常

    try:
        1/0
    except:
        info = sys.exc_info()
        print(info)
        print(info[0])
        print(info[1])
    
    """输出
    (<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero',), <traceback object at 0x000001D3E9FF62C8>)
    <class 'ZeroDivisionError'>
    division by zero
    """
    

    获取函数名和行号

    上面介绍的方法二回打印出问题代码的行号,还有一些方法可以获取函数名和行号

    import sys
    
    
    def get_cur_info():
        """Return the frame object for the caller's stack frame."""
        try:
            raise Exception
        except:
            f = sys.exc_info()[2].tb_frame.f_back
        return (f.f_code.co_name, f.f_lineno)
    
    
    def callfunc():
        print(get_cur_info())
    
    
    if __name__ == '__main__':
        callfunc()
    
    """输出:
    ('callfunc', 131)
    """
    
    import sys
    def get_cur_info():
        # 获取当前函数名
        print(sys._getframe().f_code.co_name)
        # 获取调用函数名(A调用B函数,获取A的函数名)
        print(sys._getframe().f_back.f_code.co_name)
    get_cur_info()
    
    """输出:
    get_cur_info
    <module>
    """
    
  • 相关阅读:
    平面点集最佳平面
    快速变幻AABB的顶点
    惯性坐标系
    Grapher
    Grapher
    射线到直线方程的转换
    两个运动球的相交性测试
    射线和球的相交性
    Glow Shader
    Shder中实现TintColor
  • 原文地址:https://www.cnblogs.com/se7enjean/p/12720197.html
Copyright © 2020-2023  润新知