使用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之入门(三)序列
May 25 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
Atom的python插件和常用插件说明
Jul 08 Python
python for 循环获取index索引的方法
Feb 01 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
如何使用python爬虫爬取要登陆的网站
Jul 12 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
Aug 23 Python
Opencv求取连通区域重心实例
Jun 04 Python
Python一行代码实现自动发邮件功能
May 30 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 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模板之Phpbean的目录结构
2008/01/10 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
在vue中使用Base64转码的案例
2020/08/07 Javascript
在Django框架中编写Context处理器的方法
2015/07/20 Python
Python+Opencv识别两张相似图片
2020/03/23 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
Python列表解析配合if else的方法
2018/06/23 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
品酒会策划方案
2014/05/26 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
长征观后感
2015/06/09 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书