Python语言基础15:异常

Python语言基础15:异常 学习笔记

异常
Library Reference

'''
程序在运行过程中,不可避免地会出现一些错误,比如:
    使用没有赋值的变量
    使用不存在的索引
    除0
这些错误在程序中,称为异常
程序在运行过程中,一旦出现异常,
将会导致程序立即终止,异常以后的代码全部不会执行
'''

# 处理异常
'''
程序运行时出现异常,目的并不是让程序直接终止
当出现异常时,可以对异常进行处理
try 语句
    try:
        代码块(可能出现错误的语句)
    except 异常类型 as 异常名:
        代码块(出现错误后的处理方式)
    except 异常类型 as 异常名:
        代码块(出现错误后的处理方式)
    else:
        代码块(没有出错时要执行的语句)
    finally:
        代码块(该代码块总会执行)

try 是必须的
except和finally 至少有一个
else 语句没有都可以
'''
# 异常的传播
'''
当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会继续传播,
    如果函数中没有对异常进行处理,则异常会继续向函数传播,
    如果函数调用处理了异常,则不再传播,如果美誉处理则继续先调用处传播
    直到传递到全局作用域模块(主模块),如果依然没有处理,则会导致程序终止,并且显示异常信息

当程序运行过程中出现异常后,所有的异常信息都会被保存到一个专门的异常对象中,
    而异常传播时,实际上就是异常对象抛给了调用处

'''

异常对象与自定义异常对象

print('异常出现前')

try:
    print(c)
    print(10/0)
# except NameError:
#     # 如果except 后不跟任何的内存,则此时会捕获到所有的异常
#     # 如果except 后跟着一个异常类型,则只会捕获该类型的异常
#     print('处理NameError异常')
# except ZeroDivisionError:
#     print('处理ZeroDivisionError')

# Exception 是所有异常类的父类,会捕获到所有的异常
# 可以在异常后面跟一个as xxx ,此时xxx就是异常的对象

except Exception as e:
    print('出现 Error',e)
finally:
    print('无论什么情况,都会执行')
print('异常处理后')


# 自定义异常类,只需要创建一个继承Exception即可
class MyError(Exception):
    pass
def add(a,b):
    # 如果a 和b 中有负数,就向调用处抛出异常
    if a < 0 or b < 0:
        # raise 用于向外部抛出异常,后边可以跟一份异常类,或异常类的实例
        # raise Exception
        # 抛出异常的目的,让调用者知道出现问题时,可以自己处理
        raise MyError('自定义异常,两个参数中不能有负数')

        # 也可以使用if else 来代替异常的处理
        #return  None
    r = a + b
    return r
print(add(24,-45))

你可能感兴趣的:(Python)