当前位置:   article > 正文

【Python】异常处理?tryexcept用法详解、使用自定义异常处理类,进行错误日志的自动生成与写入_try except自定义异常

try except自定义异常

目录

异常处理

tryexcept用法详解

多分支处理异常类

通用异常类Exception

多分支异常类+通用异常类

finally

主动抛出异常

使用自定义异常处理类进行日志的写入


异常处理

俗话说天有不测风云,对于天气的观测来说会有很多的变数,那么对于程序来说也会有相对的异常,那么什么叫异常处理呢?

就比如如果我定义了一个列表,那么我去获取列表内的一个不存在的索引的时候,就会报错(异常),为了增强程序的健壮性,我们也需要考虑异常处理的内容

以‘获取列表内的一个不存在的索引’为例:

  1. varlist = [0, 1, 2, 3]
  2. 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。。。在错误发生时进行处理

  1. try:
  2. n1, n2 = 2, '3'
  3. print(n1 + n2)
  4. except:
  5. pass

假设读取一个不存在的文件,会发生错误,可以使用两种方式进行处理
1.可以在文件读取前先判断当前文件是否存在
2.可以使用try。。。except。。。在错误发生时进行处理。注意:是在错误发生后进行的处理

  1. try:
  2. with open('./111.txt','r',encoding='utf-8') as ganyu:
  3. print(ganyu.read())
  4. except:
  5. print('文件不存在')
  6. print('程序继续执行')

tryexcept用法详解

  1. try:
  2. r1 = 'hello'
  3. int(r1) # 会引发ValueError
  4. except ValueError as ganyu:
  5. print(ganyu)
  6. try:
  7. r2 = 'hello'
  8. r3 = [1, 2, 3]
  9. print(r2 + r3)
  10. except TypeError as tt:
  11. print(tt)

多分支处理异常类

  1. r4 = 'hello'
  2. try:
  3. int(r4)
  4. except IndexError as gg:
  5. print('错误')
  6. except ValueError as pp:
  7. print('?')

通用异常类Exception

  1. r5 = 'hello'
  2. try:
  3. int(r5)
  4. except Exception as gg:
  5. print('错误')

多分支异常类+通用异常类

如果前面的except都不正确,则跳转Exception,就是说会按从上往下的顺序执行异常类

  1. r4 = 'hello'
  2. try:
  3. int(r4)
  4. except ValueError as gg:
  5. print('错误')
  6. except Exception as pp:
  7. print('?')

finally

  1. r6 = 7
  2. try:
  3. int(r6)
  4. except ValueError as gg:
  5. print('错误')
  6. except Exception as pp:
  7. print('?')
  8. else:
  9. print('当代码块内没有出现异常时,执行的else')
  10. finally:
  11. print('无论是否引发异常都会执行这个代码块,通常情况下会进行一些清理工作')

主动抛出异常

  1. try:
  2. raise Exception('可以控制报错的内容')
  3. except Exception as e:
  4. print('Exception', e)

使用自定义异常处理类进行日志的写入

在出现异常后,对异常进行处理,并且把异常信息写入日志

  1. # 自定义异常日志处理类
  2. class Mylogpetion():
  3. def __init__(self):
  4. import traceback # 回溯模块
  5. import logging # 用于写日志的模块
  6. # logging的基本配置
  7. logging.basicConfig(
  8. filename='M:\python文件写入测试\日志.txt', # 当前文件写入位置
  9. format='%(asctime)s %(levelname)s \n %(message)s', # 格式化存储的日志格式
  10. # 日期时间 级别 错误信息
  11. datefmt='%Y-%m-%d %H:%M:%S'
  12. )
  13. # 写入日志
  14. logging.error(traceback.format_exc())
  15. # 使用自定义异常处理类
  16. try:
  17. int('aaa')
  18. except:
  19. # 在此处进行异常处理
  20. Mylogpetion() # 在异常处理的代码块中调用自定义异常类
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/243499
推荐阅读
相关标签
  

闽ICP备14008679号