赞
踩
目录
俗话说天有不测风云,对于天气的观测来说会有很多的变数,那么对于程序来说也会有相对的异常,那么什么叫异常处理呢?
就比如如果我定义了一个列表,那么我去获取列表内的一个不存在的索引的时候,就会报错(异常),为了增强程序的健壮性,我们也需要考虑异常处理的内容
以‘获取列表内的一个不存在的索引’为例:
- varlist = [0, 1, 2, 3]
- print(varlist[4])
会报如下异常:
Traceback (most recent call last):
File "M:/pycharm/python/python学习/132.异常处理.py", line 9, in <module> print(varlist[4])
IndexError: list index out of range
IndexError就是异常类
list index out of range就是异常信息
发生这种异常后,如果不对程序进行修改就无法执行下去,那么如果发送了一些无法预测的程序异常,就会显得非常麻烦
如下,两个数字的运算,其中一个不是数字,运算就会出错,这时就可以判断来预防问题
n1, n2 = 2, '3'
但是如果错误发生的条件不可预知,就可以使用try。。。except。。。在错误发生时进行处理
- try:
- n1, n2 = 2, '3'
- print(n1 + n2)
- except:
- pass
假设读取一个不存在的文件,会发生错误,可以使用两种方式进行处理
1.可以在文件读取前先判断当前文件是否存在
2.可以使用try。。。except。。。在错误发生时进行处理。注意:是在错误发生后进行的处理
- try:
- with open('./111.txt','r',encoding='utf-8') as ganyu:
- print(ganyu.read())
- except:
- print('文件不存在')
- print('程序继续执行')
- try:
- r1 = 'hello'
- int(r1) # 会引发ValueError
- except ValueError as ganyu:
- print(ganyu)
-
- try:
- r2 = 'hello'
- r3 = [1, 2, 3]
- print(r2 + r3)
- except TypeError as tt:
- print(tt)
- r4 = 'hello'
- try:
- int(r4)
- except IndexError as gg:
- print('错误')
- except ValueError as pp:
- print('?')
- r5 = 'hello'
- try:
- int(r5)
- except Exception as gg:
- print('错误')
如果前面的except都不正确,则跳转Exception,就是说会按从上往下的顺序执行异常类
- r4 = 'hello'
- try:
- int(r4)
- except ValueError as gg:
- print('错误')
- except Exception as pp:
- print('?')
- r6 = 7
- try:
- int(r6)
- except ValueError as gg:
- print('错误')
- except Exception as pp:
- print('?')
- else:
- print('当代码块内没有出现异常时,执行的else')
- finally:
- print('无论是否引发异常都会执行这个代码块,通常情况下会进行一些清理工作')
- try:
- raise Exception('可以控制报错的内容')
- except Exception as e:
- print('Exception', e)
在出现异常后,对异常进行处理,并且把异常信息写入日志
- # 自定义异常日志处理类
- class Mylogpetion():
- def __init__(self):
- import traceback # 回溯模块
- import logging # 用于写日志的模块
- # logging的基本配置
- logging.basicConfig(
- filename='M:\python文件写入测试\日志.txt', # 当前文件写入位置
- format='%(asctime)s %(levelname)s \n %(message)s', # 格式化存储的日志格式
- # 日期时间 级别 错误信息
- datefmt='%Y-%m-%d %H:%M:%S'
- )
- # 写入日志
- logging.error(traceback.format_exc())
-
-
- # 使用自定义异常处理类
- try:
- int('aaa')
- except:
- # 在此处进行异常处理
- Mylogpetion() # 在异常处理的代码块中调用自定义异常类

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。