使用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之眼花缭乱的运算符
Sep 14 Python
1 行 Python 代码快速实现 FTP 服务器
Jan 25 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
python实现三次样条插值
Dec 17 Python
详解Python学习之安装pandas
Apr 16 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
python打开文件的方式有哪些
Jun 29 Python
提高python代码运行效率的一些建议
Sep 29 Python
一文搞懂如何实现Go 超时控制
Mar 30 Python
python如何正确使用yield
May 21 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
PHP多线程抓取网页实现代码
2010/07/22 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
JS在IE下缺少标识符的错误
2014/07/23 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
Python迭代和迭代器详解
2016/11/10 Python
python实现kNN算法
2017/12/20 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
a标签下载链接的简单实现
2016/09/13 HTML / CSS
百思买美国官网:Best Buy
2016/07/28 全球购物
NET程序员上机面试题
2015/05/23 面试题
如何安装ruby on rails
2014/02/09 面试题
学习雷锋倡议书
2014/04/15 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
监守自盗观后感
2015/06/10 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python