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

时间:2020-04-17
本文章向大家介绍Python 代码的异常处理和打印异常信息,主要包括Python 代码的异常处理和打印异常信息使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

前言

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

原文地址:https://www.cnblogs.com/se7enjean/p/12720197.html