使用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脚本实现DNSPod DNS动态解析域名
Feb 14 Python
Python调用微信公众平台接口操作示例
Jul 08 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
使用python实现knn算法
Dec 20 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
详解python的sorted函数对字典按key排序和按value排序
Aug 10 Python
解析python的局部变量和全局变量
Aug 15 Python
python Kmeans算法原理深入解析
Aug 23 Python
python 子类调用父类的构造函数实例
Mar 12 Python
浅谈keras中的目标函数和优化函数MSE用法
Jun 10 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
基于python实现银行管理系统
Apr 20 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自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
PHP7匿名类用法分析
2016/09/26 PHP
PHP多进程编程实例详解
2017/07/19 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
JS的replace方法详细介绍
2012/11/09 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
Python基础之函数用法实例详解
2014/09/10 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Python命令启动Web服务器实例详解
2017/02/23 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
python编程使用协程并发的优缺点
2018/09/20 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
python使用Geany编辑器配置方法
2020/02/21 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
Ibatis如何使用动态表名
2015/07/12 面试题
如何开发安全的AJAX应用
2014/03/26 面试题
实习生自我鉴定
2013/12/12 职场文书
C++程序员求职信
2014/05/07 职场文书
代办出身证明书
2014/10/21 职场文书
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android