异常处理
语法:
try:
#有可能发生语句块
except 错误类型1 as e:
#异常处理
except 错误类型2 as e2:
#异常处理2
......
finally:
#无论代码是否出现异常都会执行此语句块
执行过程:
先执行try下面的语句块,当语句出现异常的时候,会去excpt语句中进行错误匹配,
若匹配上则执行该except下面的语句,若匹配不上的则报错。
无论代码是否出现异常,都会执行finally下面的语句。
在使用异常的捕捉的时候需要注意,它不但可以捕捉该类型的错误,
还可以将其子类一网打尽。
错误调用栈
若错误没有捕获,则会一直向上抛,直到抛给python解释器,python解释器
打印错误的堆栈信息然后退出。
出错的时候,要分析错误的调用栈的信息,这样才能定位错误
因此查找错误的时候
第一:先看错误类型
第二:从下往上找[必须是你自己写的模块]
例:记录错误
import logging
import time
def func1(a,b):
return a/b
def func2(a,b):
return func1(a,b)
def main(a,b):
return func2(a,b)
if __name__ == '__main__':
try:
print(main(1,0))
except Exception as e:
logging.exception(e)
print("end")
time.sleep(30)
print("over")
自定义异常
异常并不是凭空产生的,捕获的异常其实就是系统定义异常的类的一个实例。
在我们开发的过程中,我们不但可以捕获异常,我们也可自己自定义异常,主动抛出异常
在自定义异常的时候我们需要选好继承关系。
在必要的时候我们才进行自定义错误类型,若python 中存在已有的错误类型,我们
尽量使用python内置的错误类型。
常见的错误类型
- AttributeError :试图访问一个对象没有的属性
- IOError :输入/输出异常 无法打开文件
- IndentationError :语法错误,代码没有对齐
- keyError : 访问的key字典中不存在
- NameError :使用一个还未赋值的对象的变量
- TypeError :传入对象类型与要求不合法
- ValueError :传入一个调用者不期望的值
高阶函数
map函数语法
map(func,iter1)
参数一:函数 有且只有一个参数
参数二:可迭代对象
功能:将可迭代对象中的元素依次取出作用于func函数,
并将作用的结果作为迭代器返回。
reduce函数
语法:reduce(func,lsd)
参数1为函数,参数2为列表
功能:一个函数作用在序列上,这个函数必须接受两个参数,reduce把结果继续和序列的下一个元素累计运算
reduce(f,[1,2,3,4])等价于f(f(f(1,2),3),4),类似于递归