Python进阶(27)—自定义异常、异常与函数、获取异常信息

◎知识点

  1. 自定义异常

  2. 异常和函数

  3. 获取异常信息


◎脚本练习

▽ 自定义异常

"""
    尽管python内置的异常类对象可以满足我们绝大部分的需求,但是有时候我们可能想要创建自定义的
异常类对象。
    正如所有内置异常类对象的基类是Exception,自定义异常类对象只需要继承Exception或其子类
"""

class MyException(Exception):
    def __init__(self, msg1, msg2):
        self.msg1 = msg1
        self.msg2 = msg2

try:
    raise MyException("123", "abc")
except MyException as err:
    print(err)


▽ 异常和函数

"""
    当函数内发生异常时,异常实例对象会被抛给该函数的调用者,如果该函数的调用者没有捕获和处理,
则继续抛给上一层的调用者,这样一直向上抛,最后会被python解释器捕获。
"""

"""
def f1():
    print(1 / 0)

def f2():
    f1()

def f3():
    f2()

f3()
"""

"""
    在异常实例对象被向上抛的过程中,可以选择在合适的层对异常实例对象进行捕获和处理,而不需要
在每一层进行捕获和处理。
"""

def f1():
    print(1 / 0)

def f2():
    f1()

def f3():
    try:
        f2()
    except ZeroDivisionError as err:
        print(err)

f3()


▽ 获取异常信息

"""
    在捕获异常实例对象后,可以调用标准库模块sys中的函数exc_info以获取异常的相关信息。
    该函数的返回值是一个包含三个元素的元组,这三个元素分别表示:
    异常的类型、异常的错误信息和包含异常调用堆栈的跟踪信息的Traceback对象
    为了进一步提取Traceback对象中包含的信息,可以调用标准库模块traceback中的函数extract_tb()
"""

import sys
import traceback

def f1():
    print(1 / 0)

def f2():
    try:
        f1()
    except ZeroDivisionError:
        ex_type, ex_value, ex_traceback = sys.exc_info()

        print('异常的类型: %s' % ex_type)
        print('异常的错误信息: %s' % ex_value)
        print('异常调用堆栈的跟踪信息: %s' % ex_traceback)

        tb = traceback.extract_tb(ex_traceback)
        print(tb)

        for filename, linenum, funcname, source in tb:
            print('文件名: %s' % filename)
            print('行数:%s' % linenum)
            print('函数名:%s' % funcname)
            print('源码:%s' % source)

f2()


◎脚本地址:https://github.com/anzhihe/learning/blob/master/python/practise/learn-python/python_advanced/custom_exception.py

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/5472.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注