使用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自动化测试ConfigParser模块读写配置文件
Aug 15 Python
python实现flappy bird小游戏
Dec 24 Python
通过shell+python实现企业微信预警
Mar 07 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
python原类、类的创建过程与方法详解
Jul 19 Python
Python3标准库glob文件名模式匹配的问题
Mar 13 Python
使用Python爬取弹出窗口信息的实例
Mar 14 Python
Python 如何在字符串中插入变量
Aug 01 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
Python函数调用追踪实现代码
Nov 27 Python
python 获取谷歌浏览器保存的密码
Jan 06 Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 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的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
JS中表单的使用小结
2014/01/11 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
旅游管理本科生求职信
2013/10/14 职场文书
计算机网络专业个人的自我评价
2013/10/17 职场文书
求职简历推荐信范文
2013/12/02 职场文书
优秀村官事迹材料
2014/01/10 职场文书
党员干部一句话承诺
2014/05/30 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
《将心比心》教学反思
2016/02/23 职场文书
php去除deprecated的实例方法
2021/11/17 PHP
Python实现视频中添加音频工具详解
2021/12/06 Python
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js