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

本文详细介绍了Python中的异常处理机制,包括try-except的使用、多分支异常处理、通用异常类Exception、finally块的运用以及如何主动抛出异常。通过实例展示了如何预防和处理运行时错误,如尝试访问列表不存在的索引、类型转换错误等。同时,还提到了自定义异常处理类,用于在异常发生时记录日志,增强了程序的健壮性和可维护性。
摘要由CSDN通过智能技术生成

目录

异常处理

tryexcept用法详解

多分支处理异常类

通用异常类Exception

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

finally

主动抛出异常

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


异常处理

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

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

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

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('程序继续执行')

tryexcept用法详解

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('?')

通用异常类Exception

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('?')

finally

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()  # 在异常处理的代码块中调用自定义异常类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值