1

Python自定义异常、异常与函数、获取异常信息 | CHEGVA

 1 year ago
source link: https://chegva.com/5472.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

▽ 异常和函数

"""
    当函数内发生异常时,异常实例对象会被抛给该函数的调用者,如果该函数的调用者没有捕获和处理,
则继续抛给上一层的调用者,这样一直向上抛,最后会被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()
Python

▽ 获取异常信息

"""
    在捕获异常实例对象后,可以调用标准库模块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()
Python

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

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK