使用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 相关文章推荐
在Lighttpd服务器中运行Django应用的方法
Jul 22 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
Python二叉树的定义及常用遍历算法分析
Nov 24 Python
python验证码识别实例代码
Feb 03 Python
Python之列表的插入&替换修改方法
Jun 28 Python
Django使用模板后无法找到静态资源文件问题解决
Jul 19 Python
3种python调用其他脚本的方法
Jan 06 Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
pytorch 查看cuda 版本方式
Jun 23 Python
通过代码实例了解Python3编程技巧
Oct 13 Python
Python 使用dict实现switch的操作
Apr 07 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 CURL获取返回值的方法
2014/05/04 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
django中的ajax组件教程详解
2018/10/18 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
vue项目实现github在线预览功能
2018/06/20 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
python如何代码集体右移
2020/07/20 Python
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
软件测试笔试题
2012/10/25 面试题
语文教育专业应届生求职信
2013/11/23 职场文书
保安自我鉴定范文
2013/12/08 职场文书
公务员个人总结
2015/02/12 职场文书
增值税发票丢失证明
2015/06/19 职场文书
施工现场安全管理制度
2015/08/05 职场文书
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers