使用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之网站的结构
Oct 24 Python
Python实现破解猜数游戏算法示例
Sep 25 Python
python操作MySQL 模拟简单银行转账操作
Sep 27 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
python如何实现int函数的方法示例
Feb 19 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
python中aioysql(异步操作MySQL)的方法
Apr 11 Python
python3.6 如何将list存入txt后再读出list的方法
Jul 02 Python
pandas取出重复数据的方法
Jul 04 Python
Python高级property属性用法实例分析
Nov 19 Python
pygame实现弹球游戏
Apr 14 Python
Python上下文管理器Content Manager
Jun 26 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过程中的一些注意点的总结
2013/10/25 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
PHP文件上传类实例详解
2016/04/08 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
2013/05/17 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
Vue结合后台导入导出Excel问题详解
2019/02/19 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
Python实现读取Properties配置文件的方法
2018/03/29 Python
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
.net软件工程师面试题
2015/03/31 面试题
优化经济发展环境工作总结
2015/08/11 职场文书
python基于tkinter制作下班倒计时工具
2021/04/28 Python
pytorch 如何使用float64训练
2021/05/24 Python
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技