python基础:异常处理及日志输出

导语:今天学习下异常处理和日志!

一、异常处理:

  1. 什么是异常?

异常是程序在执行过程中遇到的错误。比如,当你尝试除以0时,Python会抛出一个ZeroDivisionError异常;当你访问一个不存在的列表索引时,会抛出IndexError异常。异常会导致程序中断,无法继续执行。

  1. 异常处理的基本语法

在Python中,我们可以使用try...except语句来捕获和处理异常。以下是一个简单的例子:

try:
    # 被检测的语句块
    print(1 / 0)
except ZeroDivisionError as e:
    # 处理异常的语句块
    print('除数不能为0')
    print(e)

在这个例子中,当我们尝试除以0时,程序会捕获到ZeroDivisionError异常,并输出自定义的错误信息和系统自带的异常信息。

  1. 多个异常的处理

一个try语句可以跟随多个except子句,用于捕获不同类型的异常。例如:

try:
    num = int(input('请输入一个数:'))
    print(1 / num)
except ZeroDivisionError as e:
    print(e)
except ValueError:
    print("只能输入整数")

在这个例子中,我们首先尝试将用户输入的字符串转换为整数,如果输入的不是整数,会抛出ValueError异常。

  1. 兜底的异常处理

如果我们想捕获所有类型的异常,可以使用一个不带异常类型的except子句。例如:

try:
    # 程序代码
except Exception:
    print('程序异常')
  1. else和finally子句

else子句用于在没有异常发生时执行代码,而finally子句用于无论是否发生异常都会执行的代码。例如:

try:
    # 程序代码
except Exception:
    print('程序异常')
else:
    print('程序未出现异常')
finally:
    print('程序执行完了')

二、日志记录:

1、什么是日志?

日志是程序在运行过程中产生的一系列记录,包括程序运行的状态、错误信息、调试信息等。通过日志,我们可以了解程序的运行情况,便于调试和优化。

2、使用loguru库记录日志

loguru是一个简单易用的Python日志库,可以帮助我们快速实现日志记录功能。以下是一个示例:

from loguru import logger

logger.debug('测试')
logger.info('测试')
logger.warning('测试')
logger.error('测试')
logger.critical('测试')

日志分为不同的级别,从低到高分别为:debug、info、warning、error、critical。不同级别的日志会以不同的颜色显示,方便我们识别。

3、日志配置:高效管理日志输出

  1. 移除默认控制台日志输出

在loguru中,默认情况下日志会输出到控制台。如果我们想禁止这种输出,可以使用logger.remove()方法,并传入handler_id=None参数。这会移除所有已经添加的处理器,包括默认的控制台输出。

logger.remove(handler_id=None)
  1. 添加文件日志处理器

我们可以使用logger.add()方法来添加一个文件日志处理器,将日志信息写入到文件中。以下是如何配置文件日志处理器的参数:

  • 文件位置:指定日志文件存储的位置和文件名。
logger.add('./log/log1.log', ...)
  • 日志轮转rotation参数用于指定日志文件轮转的条件。在loguru中,日志轮转可以基于文件大小、时间间隔等。例如,rotation='200KB'表示当日志文件达到200KB时,将创建一个新的日志文件。
rotation='200KB'
  • 压缩格式compression参数用于指定旧日志文件的压缩格式。例如,compression='zip'表示使用ZIP格式压缩旧日志文件。
compression='zip'
  • 编码格式encoding参数用于指定日志文件的编码格式,确保日志中的中文或其他特殊字符能够正确显示。
encoding='utf-8'

结合以上配置,以下代码展示了如何设置一个文件日志处理器:

from loguru import logger

logger.remove(handler_id=None)  # 禁止控制台输出
logger.add('./log/log1.log',    # 日志文件位置
           rotation='200KB',    # 日志轮转大小
           compression='zip',   # 压缩格式
           encoding='utf-8')    # 文件编码
for i in range(10000):
    logger.debug('测试')

通过这种方式,日志信息将不会显示在控制台上,而是存储在指定的日志文件中,并且当日志文件达到指定大小时,会自动进行轮转和压缩。

总结

下次见,拜拜~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值