使用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在校内发人人网状态(人人网看状态)
Feb 19 Python
用Python的SimPy库简化复杂的编程模型的介绍
Apr 13 Python
浅谈python连续赋值可能引发的错误
Nov 10 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
详解python 3.6 安装json 模块(simplejson)
Apr 02 Python
python 魔法函数实例及解析
Sep 25 Python
Pytorch 实现权重初始化
Dec 31 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
python装饰器三种装饰模式的简单分析
Sep 04 Python
python 写一个水果忍者游戏
Jan 13 Python
解决pytorch 数据类型报错的问题
Mar 03 Python
ubuntu安装jupyter并设置远程访问的实现
Mar 31 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
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
Tesserocr库的正确安装方式
2018/10/19 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
Python3-异步进程回调函数(callback())介绍
2020/05/02 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
C语言编程题
2015/03/09 面试题
存储过程的优缺点是什么
2015/01/10 面试题
求职面试个人自我评价
2014/02/28 职场文书
应用数学专业求职信
2014/03/14 职场文书
网络信息安全承诺书
2014/03/26 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang