Python基础第15讲 - 异常

mac2024-11-13  8

Python基础第15讲 - 异常

一、异常的简介

程序在运行过程中不可避免会出现一些错误

比如:使用了没有赋值过的变量、除0、使用不存在的索引…

这个错误在程序中我们就称之为异常

程序在运行过程中,一旦出现异常会导致程序会立即终止,异常后面的代码都不会执行

print(20/0) # 异常 --> ZeroDivisionError: division by zero

1.1 处理异常

程序出现异常,目的并不是程序立即终止

Python是希望在出现异常时,我们可以编写代码对异常进行处理

语法: try: 代码块(可能出现错误的语句) except 异常类型 as 异常名: 代码块(出现错误后的处理方式) except 异常类型 as 异常名: 代码块(出现错误后的处理方式) except 异常类型 as 异常名: 代码块(出现错误后的处理方式) except 异常类型 as 异常名: 代码块(出现错误后的处理方式) else: 代码块(没有错误时要执行的语句) finally: 代码块(是否有异常都会执行) print('python') try: print(20/0) # try中放置有可能出现错误的代码 except: print('出错了...') # except中放置的是出错以后的处理方式 else: print('程序没有错误,正常执行....') # else没有错误执行的语句 print('hello') 结果: python 出错了... hello

二、异常的传播

2.1 当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再传播 2.2 如果函数中没有对异常进行处理,则异常会继续像函数调用处传播 2.3 如果函数调用处处理了异常,则不再传播,如果没有处理则继续向调用处传播 2.4 直到传递到全局作用域,如果依然没有处理,则程序终止,并且显示异常信息 def fn(): print('hello....') print(20 / 0) try: fn() except: pass # 结果: hello.... 2.5 当程序运行过程中出现异常以后,所有的异常信息会被专门保存到一个异常对象当中 2.6 而异常传播时,实际上就是异常对象抛给了调用处 2.7 NameError类专门处理变量的错误 def fn(): print('hello fn') print(20 / 0) # print(c) def fn2(): print('hello fn2') fn() def fn3(): print('hello fn3') fn2() fn3() # ZeroDivisionError: division by zero

三、异常对象

如果except不跟任何内容,则会捕获所有异常, 如果except跟着一个异常类型,那么此时它只会捕获该类型的异常 Exception 是所有异常类的父类 所以如果except后跟的是Exception 它会捕获到所有的异常 finally语句无论是否出现异常 都会执行 print('异常出现前...') lst = [] try: print(20 / 0) # print(a) # l[0] except NameError: # 如果except不跟任何内容,则会捕获所有异常 # 如果except跟着一个异常类型,那么此时它只会捕获该类型的异常 # print('处理异常的逻辑..') print('出现 NameError 异常') except ZeroDivisionError: print('出现 ZeroDivisionError 异常') # Exception 是所有异常类的父类 所以如果except后跟的是Exception 它会捕获到所有的异常 except Exception as e: print('出现异常了',e,type(e)) # finally语句无论是否出现异常 都会执行 finally: print('无论是否出现异常 都会执行') print('异常出现后')

四、自定义异常对象

抛出异常:可以是用raise语句来抛出异常,raise语句后面需要跟一个异常类或者是异常的实例

抛出异常的目的,告诉调用者这里调用时可能出现问题,希望你自己处理下

# 定义异常类 只需要继承Exception就可以了 class MyError(Exception): pass def add(a,b): # 如果a,b中有负数,就像调用处抛出异常 if a < 0 or b < 0: # raise Exception('参数用不能有负数') # 自定义异常信息 raise MyError('参数用不能有负数') r = a + b return r print(add(-1,2))
最新回复(0)