一、异常处理
在程序运行时出现的错误,使用对应方法时没有按照开发语言的要求使用
一旦出现错误,会中断代码的执行。
实际开发中需要对异常问题单独判断处理,保证程序能持续运行
捕获到异常后根据需求处理,也可以不处理
1-1 常见异常
索引错误
-
索引下标异常,一般发生在数据取值
字典key值错误
-
key值错误 字典取值时错误
类型错误
-
类型错误 多个数据进行计算时或出现的问题
文件错误
-
读取文件时问价不存在
# 索引下标取值错误 data = 'itcast' data[100] # 字典取值错误 data = {'name':'张三'} data['age'] # 类型错误 data = '100' data2 = 10 data3 = data/data2 # 文件读取错误 路径不存在 with open('aaa.txt','r',encoding='utf-8') as f: f.read()
1-2 异常捕获
通过语法捕获代码中的异常,根据异常信息,解决异常的问题,保证代码能持续运行
-
格式
try: 需要捕获遗产干的代码片段,有开发人员自己决定哪些代码需要捕获 except: 捕获到异常后处理的逻辑
# 进行异常捕获 try: # 把出现的错误的代码逻辑放入try的作用域中 data = 15/0 except: # 捕获到异常处理的业务逻辑 print('异常被捕获') # 异常被捕获后,可以正常执行后续的逻辑 print('其他代码逻辑')
1-3 指定异常类型捕获
# 可以捕获所有异常 try: data_str = 'itcast' # data_str[100] f = open('aasd.txt','r',encoding='utf-8') except: # 捕获到异常处理的业务逻辑 print('异常被捕获') # 异常被捕获后,可以正常执行后续的逻辑 print('其他代码逻辑') # 捕获固定的异常 处理固定错误 try: # data = 15/0 # f = open('aasd.txt', 'r', encoding='utf-8') data_str='itcast' data_str[100] # 捕获指定异常 except (FileNotFoundError,ZeroDivisionError,IndexError): print('捕获0为除数的异常') print('其他代码逻辑')
1-4 异常的其他处理
可以在处理异常时编写没有异常的逻辑
try: data = 15/0 # Exception as e 获取异常的错误信息 # 可以捕获到异常后输出错误信息 except Exception as e: print('异常被捕获') print(e) else: print('else 没有异常逻辑') finally: print('finally :无论是否有异常都执行')
1-5 函数中的异常处理
-
在调用函数时进行异常捕获
def func(a,b): data = a + b print(data) try: # 调用其他开发人员编写的代码处理线错误 func('10',20) except Exception as e: print(e)
-
封装函数时异常捕获
# 函数的异常处理 def func(a, b): data = 0 # 在封装的函数内捕获异常 try: data = a + b except: # 函数内自己处理异常 print('异常错误') return data # 调用函数时,捕获函数执行的异常 func(10,'20')
-
函数内捕获到异常不处理,在传递给掉用函数的地方
# 函数的异常处理 def func(a, b): data = 0 # 在封装的函数内捕获异常 try: data = a + b except: # 将异常的错误信息传递到调用地方 当前没有处理异常 raise Exception('函数内计算错误') return data # 调用函数时,捕获函数执行的异常 try: func(10,'20') except Exception as e: print('异常捕获') print(e)