使用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 10 Python
使用Python设置tmpfs来加速项目的教程
Apr 17 Python
Python os模块学习笔记
Jun 21 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
python在文本开头插入一行的实例
May 02 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
python操作文件的参数整理
Jun 11 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
详解Python小数据池和代码块缓存机制
Apr 07 Python
python 中的jieba分词库
Nov 23 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中的Memcache详解
2014/04/05 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
跟老齐学Python之Import 模块
2014/10/13 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
Python2和Python3中print的用法示例总结
2017/10/25 Python
python字符串格式化方式解析
2019/10/19 Python
如何清空python的变量
2020/07/05 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
传播学毕业生求职信
2013/10/11 职场文书
电大毕业生自我鉴定
2013/11/10 职场文书
学校十一活动方案
2014/02/01 职场文书
小班重阳节活动方案
2014/02/08 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
辩论赛主持词
2014/03/18 职场文书
会计演讲稿范文
2014/05/23 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL