Python问题异常处理与日志结合

我们掌握了try-except来处理程序运行中可能遇到的异常,以及使用logging来记录程序运行日志,该篇文章就结合二者来讲讲如何记录程序运行过程中的各种事件、状态信息以及遇到的异常情况,以便于追踪、诊断和解决程序运行时的问题。

目录

一、配置日志记录器 (logging.Logger)

二、 使用日志记录器记录信息

三、异常处理与日志记录


一、配置日志记录器 (logging.Logger)

首先,创建一个日志记录器实例,并根据需要配置其级别、输出格式、过滤规则等属性。常用的日志级别包括(由低到高):DEBUGINFOWARNINGERRORCRITICAL。日志格式可以自定义,通常包含时间戳、日志级别、源模块名、进程/线程ID、以及具体的消息内容。

import logging
import time
#创建一个日志记录器
logger=logging.getLogger(__name__)
logger.setLevel(logging.DEBUG) #设置日志记录器的最低输出级别为DEBUG#设置日志格式
formatter=logging.Formatter("%(asctime)s - %(name)s - %(levelname)s -%(modulename)s - %(message)s")
datefmt="%Y-%m-%d %H:%M:%S"#添加日志处理器,控制台、文件
#控制台日志
stream_handler=logging.StreamHandler() #输出到控制台
stream_handler.setFormatter(formatter) #设置日志格式
stream_handler.setLevel(logging.INFO) #单独设置控制台的输出级别为INFO#文件日志
file_handler = logging.FileHandler(filename=f"{time.strftime('%Y-%m-%d')}_app.log", encoding='utf-8') #输出到文件、文件名格式为:年-月-日_LOG.log
file_handler.setFormatter(formatter)#设置日志格式
file_handler.setLevel(logging.DEBUG)#单独设置文件日志的输出级别为DEBUG#添加日志处理器
logger.addHandler(stream_handler)
logger.addHandler(file_handler)

二、 使用日志记录器记录信息

在代码中,根据需要在适当的位置调用日志记录器的方法来记录不同级别的信息。这有助于跟踪程序执行流程、记录关键决策点、参数值、中间结果等。

def complex_computation(item):# 一个可能出现错误的复杂计算过程if item=='error':raise ValueError("Divide by zero error!")return item/2
def process_data(data):logger.debug(f"Function called with param: {data}")try:# 执行可能会出错的操作if not isinstance(data,list):raise ValueError("data must be a list")for item in data:#假设某个计算过程可能出错result=complex_computation(item)print(result)except ValueError as ve:#记录异常信息logger.error(f"ValueError: {ve}")except Exception as e:#记录未知异常信息logger.exception(f"Exception: {e}")

三、异常处理与日志记录

在可能出现异常的地方使用 try-except 结构捕获异常,并在 except 块中使用日志记录异常信息。这样,即使程序因异常而中断,也能确保异常的相关细节被记录下来,便于后续分析。

try:process_data([1,2,3,'error',4,5])
except Exception as e:logging.critical(f'Critical failure during processing: {e}',exc_info=True)#处理全局异常,或者直接让程序退出except ValueError as ve:logger.warning(f"ValueError caught: {ve}")# 处理或恢复操作
except SomeCustomException as sce:logger.error(f"Custom exception encountered: {sce}", extra={'context': additional_info})# 特定异常处理
except Exception as e:logger.critical("Unexpected error occurred:", exc_info=True)# 发送报警通知、保存现场数据等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/769119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H3C技术大全复现之高级路由交换技术 1

华子目录 VLAN 基本技术VLANIEEE 802.1Q交换机端口类型MVRP协议实验测试 VLAN扩展技术Super VLAN产生背景Super vlan(相当于vlanif接口,也属于虚拟接口,可以充当网关)Sub vlan(普通vlan)关于代理ARP普通代理…

【C语言】编译链接

1、宏(***) 1.1#define定义宏 #define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义 宏(define macro)。 注意:用于对数值表达式进行求…

flutter 单例模式

总的思想就是: 确保整个应用程序中只有一个 TranslationService 实例。 避免重复创建相同的实例,节省资源。 为整个应用程序提供一个全局访问点,方便在不同地方使用同一个实例。 1.类创建个实例 2.然后用构造函数赋值给实例 3.其他地方调用时返回实例 import package:social…

Java毕业设计-基于springboot开发的网上图书商城平台-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能模块3、卖家功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的网上图书商城…

taro之Swiper的使用

图样&#xff1a; 往往我们需要轮播图去显示我们想要的图片之类的 这是工作的代码 <View classNametop-title><SwiperclassNamebanner-swiperinterval{3000}circularautoplay>{homeBannerList.map((item) > {return (<SwiperItem key{item.id}><View…

apisix创建https

总结了下apisix 使用https 的问题和方法 1、apisix 默认https 端口是9443 2、apisix 需要上传证书后才可以使用https 否二curl测试会报错 SSL routines:CONNECT_CR_SRVR_HELLO 3、apisix 上传证书方法 我是使用的自签名证书&#xff0c;注意自签名证书的Common Name 要写你…

HCIP —— 生成树 (下)

目录 STP&#xff08;生成树&#xff09;的角色选举 根网桥 根端口 选举规则&#xff1a; 指定端口 生成树的端口状态 STP的接口状态&#xff1a;禁用、阻塞、侦听、学习、转发 五种状态 禁用状态 阻塞状态 侦听状态 学习状态 转发状态 当生成树拓扑结构发生变化 …

【Linux】Vmware16虚拟机安装Ubuntu,在Ubuntu中编译程序,编译过程中卡死,无法关机

1. 问题 软件版本&#xff1a; VMware 16.2.1Ubuntu 18 现象 C程序通过Makefile编译&#xff0c;在make过程中卡死&#xff0c;没有任何报错。卡死后任何操作都无反应&#xff0c;无法关机&#xff0c;只能通过任务管理器强行结束VMware忽然出现的这个问题&#xff0c;之前用了…

一文6000字从0到1使用Locust做性能测试【建议收藏】

01、Locust介绍 Locust 一个开源性能测试工具&#xff0c;使用Python代码来定义用户行为&#xff0c;用它可以模拟百万计的并发用户访问你的系统。 性能工具对比&#xff1a; LoadRunner 是非常有名的商业性能测试工具&#xff0c;功能非常强大。使用也比较复杂&#xff0c;目…

【漏洞复现】科立讯通信指挥调度平台editemedia.php sql注入漏洞

漏洞描述 在20240318之前的福建科立讯通信指挥调度平台中发现了一个漏洞。该漏洞被归类为关键级别,影响文件/api/client/editemedia.php的未知部分。通过操纵参数number/enterprise_uuid可导致SQL注入。攻击可能会远程发起。 免责声明 技术文章仅供参考,任何个人和组织使…

瞪铃企业具备哪些特点

瞪羚企业的特点 ●【成长速度快】 凭借长板优势实现井喷式、裂变式增长。 往往依靠自身的长板特色与优势&#xff0c;超越一般的游戏规则、独树一帜&#xff0c;建立自己的王国&#xff0c;以超越常规的速度实现飞快成长。 ●【创新能力强】 研发原创性技术&#xff0c;采用…

电工职业培训初级到高级,电工技术与试题资料大全

一、资料描述 本套电工全套资料&#xff0c;大小1.70G&#xff0c;共有178个文件&#xff0c;PDF文件为主。 二、资料目录 01-电工技术基础知识大全 02-电工基础知识 03-电工技术 04-电工操作技术 05-电工识图 06-电工口诀 07-电工手册 08-PLC的应用 09-电工电子电气…

用eclipse创建Web项目,通过Servlet实现Web访问的功能。

要使用Eclipse和Tomcat 10创建一个简单的Web项目&#xff0c;并通过Servlet实现Web访问功能&#xff0c;你需要遵循以下详细步骤&#xff1a; 1. 安装和配置Eclipse和Tomcat 10 确保你已经安装了Eclipse IDE for Java EE Developers和Tomcat 10。如果还没有安装&#xff0c;请…

【VALL-E-01】环境搭建

本系列文章系本人知乎账号迁移 本文系个人知乎专栏文章迁移 VALL-E 网络是GPT-SOVITS很重要的参考 知乎专栏地址&#xff1a; 语音生成专栏 相关文章链接&#xff1a; 【VALL-E-01】环境搭建 【VALL-E-02】核心原理 1、环境包使用 从效果看没有GPT-SOVITS 来的好 环境安装…

python + tensorflow 开局托儿所自动点击脚本

python开局托儿所自动点击脚本 屏幕截图图片数字识别消除算法自动点击 屏幕截图 python 屏幕截图可以使用pyautogui或者PIL。我使用的是PIL中的ImageGrab(要授权)。 image ImageGrab.grab(bbox(0, 0, tool.static_window_width, tool.static_window_height)) image np.arra…

后端如何返回404地址

当我们网站输入不存在的地址&#xff0c;经常会出现404的页面&#xff0c;这是如何做到的 1.添加配置 spring:mvc:view:prefix: /templates/suffix: .html 2.resources下添加templates目录&#xff0c;下面放404的网站 3.添加依赖&#xff0c;版本在主pom里面配置好了&#x…

springboot项目学习-瑞吉外卖(3)

1.任务 实现分类管理功能数据的添加实现分类管理数据的分页查询实现分类管理数据的删除 由于前两个业务和之前的业务基本一致&#xff0c;所以这里就不重点介绍了&#xff0c;只放代码 2.分类管理功能数据的添加 前提&#xff1a;导入category实体类 2.1.CategoryMapper接口 //…

海外基金牌照的优势及注意事项-华媒舍

一、了解海外基金牌照 在投资领域&#xff0c;海外基金牌照是指投资者可以通过获得海外金融监管机构颁发的许可证&#xff0c;参与海外基金投资。拥有海外基金牌照的投资者可以享受更广泛的投资机会&#xff0c;包括跨境投资、全球资产配置等。 二、海外基金牌照的优势 多元化…

【HarmonyOS】ArkUI - 页面路由

一、概念 页面路由是指在应用程序中实现不同页面之间的跳转和数据传递。 案例&#xff1a;第一次使用某个购物应用&#xff0c;打开时肯定会是一个登录页&#xff0c;在登录成功以后&#xff0c;会跳转到首页&#xff0c;然后可能会去搜索&#xff0c;就会进入到搜索列表页&am…

茄子科技前端实习面经

需求沟通中有没有碰到什么问题&#xff0c;怎么解决的问项目用echarts有没有碰见什么问题vue2和vue3的区别defineproperty可以监听function和数组吗有碰见过双向数据绑定单向数据流的情况吗&#xff1f;父子传参父子传参有哪些vuex的理解异步数据怎么在vux怎么改vuex刷新数据会…