使用Python将Exception异常错误堆栈信息写入日志文件


Posted in Python onApril 08, 2020

假设需要把发生异常错误的信息写入到log.txt日志文件中去:

import traceback
import logging
 
logging.basicConfig(filename='log.txt', level=logging.DEBUG,
     format='%(asctime)s - %(levelname)s - %(message)s')
 
try:
 raise Exception('发生异常错误信息')
except:
 #方案一,自己定义一个文件,自己把错误堆栈信息写入文件。
 #errorFile = open('log.txt', 'a')
 #errorFile.write(traceback.format_exc())
 #errorFile.close()
 
 #方案二,使用Python标准日志管理维护工具。
 logging.debug(traceback.format_exc())

补充知识:Python---异常处理、调用栈、异常记录、抛出错误

异常处理:

在python中,内置了一套错误处理机制:try:...except:...finally

语法:

try:
可能出现异常语句
except 错误类型1 as e:
异常处理
except 错误类型2 as e:
异常处理2
...
finally:
无论是否出错,都会执行的语句

PS:python的错误也是类,所有错误的类都继承自BaseException。

所以使用except时需注意,不但会捕获该类型的错误,还会将其子类错误一网打尽

调用栈:

若异常没有被捕获,则会一直往上抛,最后抛给解释器,解释器打印错误的堆栈信息,然后退出。

因此,查找错误的时候:

1、先看错误类型

2、从下往上找

如:

使用Python将Exception异常错误堆栈信息写入日志文件

异常记录:

如果只使用异常捕获,结果只会打印错误类型,不会打印错误堆栈信息。如果不使用异常捕获,python解释器会打印错误类型及错误堆栈信息,但是程序也被结束了。使用异常记录就可以把错误类型和错误堆栈信息都打印出来,而且程序可以继续执行。

import logging

def foo(s):
 return 10/int(s)
def bar(s)
 return foo(s)*2

def mian():
 try:
  bar('0')
 except Exception as e:
  logging.exception(e)
main()
print("END")

抛出错误:

因为错误是class,捕获一个错误就是捕获到该class的一个实例,因此,错误并不是凭空产生的,而是有意创建并抛出的,pyhton的内置函数会抛出很多类型的错误,我们自己编写的函数也可以抛出错误。

如果要抛出错误,首先根据需要,可以定义一个错误的class,选择好继承关系,然后,用raise语句抛出一个错误的实例。

class FooError(valueError):
 pass
def foo(s):
 n = int(s)
 if n == 0:
  raise FooError("invalid value :%s"%s)
 return 10/n
foo('0')

PS:只有在必要的时候才定义我们自己的错误类型,如果可以选择python已有的内置的错误类型,尽量使用python内置的错误类型。

常见的错误类型

- AttributeError 试图访问一个对象没有的属性
- IOError 输入/输出异常 无法打开文件
- IndentationError 语法错误,代码没有对齐
- keyError 访问的key字典中不存在
- NameError 使用一个还未赋值的对象的变量
- TypeError 传入对象类型与要求不合法
- ValueError 传入一个调用者不期望的值

以上这篇使用Python将Exception异常错误堆栈信息写入日志文件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
深入浅析python定时杀进程
Jun 06 Python
Python中pygal绘制雷达图代码分享
Dec 07 Python
Django之无名分组和有名分组的实现
Apr 16 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
python实现点击按钮修改数据的方法
Jul 17 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
python中的itertools的使用详解
Jan 13 Python
tensorflow 查看梯度方式
Feb 04 Python
python实现图像全景拼接
Mar 27 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 #Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 #Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 #Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 #Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 #Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
Apr 08 #Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 #Python
You might like
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
JavaScript 高效运行代码分析
2010/03/18 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
使用Python绘制图表大全总结
2017/02/11 Python
Python重新加载模块的实现方法
2018/10/16 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
简述数组与指针的区别
2014/01/02 面试题
Linux文件系统类型
2012/02/15 面试题
百度软件工程师职位
2013/02/14 面试题
主要的Ajax框架都有什么
2013/11/14 面试题
如何清空Session
2015/02/23 面试题
军训自我鉴定
2013/12/14 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
教职工代表大会主持词
2014/04/01 职场文书
《画风》教学反思
2014/04/16 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
2015年手术室工作总结
2015/05/11 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle