Python捕获异常堆栈信息的几种方法(小结)
作者:xiemanR 发布时间:2022-02-19 08:01:30
标签:Python,异常,堆栈信息
程序出错的时候,我们往往需要根据异常信息来找到具体出错的代码。简单地用print打印异常信息并不能很好地追溯出错的代码:
# -*- coding: utf-8 -*-
def foo(a, b):
c = a + b
raise ValueError('test')
return c
def bar(a):
print('a + 100:', foo(a, 100))
def main():
try:
bar(100)
except Exception as e:
print(repr(e))
if __name__ == '__main__':
main()
输出:
ValueError('test',)
打印的异常信息不够详细,对错误追踪没有多大帮助。这时候异常堆栈信息就派上用场了。下面简单介绍几种打印异常堆栈信息的方法。
1.最简单的方法之一就是使用logging.exception
# -*- coding: utf-8 -*-
import logging
def foo(a, b):
c = a + b
raise ValueError('test')
return c
def bar(a):
print('a + 100:', foo(a, 100))
def main():
try:
bar(100)
except Exception as e:
logging.exception(e)
if __name__ == '__main__':
main()
输出:
ERROR:root:test
Traceback (most recent call last):
File "E:/git_work/scrapy_ppt/test.py", line 16, in main
bar(100)
File "E:/git_work/scrapy_ppt/test.py", line 11, in bar
print('a + 100:', foo(a, 100))
File "E:/git_work/scrapy_ppt/test.py", line 6, in foo
raise ValueError('test')
ValueError: test
从异常堆栈信息中我们可以不费力气就找出错误代码是哪一行。
2.其它方法:
# -*- coding: utf-8 -*-
import traceback
import sys
def foo(a, b):
c = a + b
raise ValueError('test')
return c
def bar(a):
print('a + 100:', foo(a, 100))
def main():
try:
bar(100)
except Exception as e:
# 方法二
traceback.print_exc()
# 方法三
msg = traceback.format_exc()
print(msg)
et, ev, tb = sys.exc_info()
# 方法四
traceback.print_tb(tb)
# 方法五
traceback.print_exception(et, ev, tb)
# 方法六
msg = traceback.format_exception(et, ev, tb)
for m in msg:
print(m)
if __name__ == '__main__':
main()
来源:https://blog.csdn.net/xiemanR/article/details/82934936


猜你喜欢
- 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
- 本文首先介绍了Python中的模块的概念,谈到了一个模块往往由多个模块组成,然后通过具体实例,分析了模块重载的相关内容,具体介绍如下。模块是
- 系统只要能从数据库连接池获取到一个数据库连接,就能执行CRUD。可通过数据库连接将待执行SQL发给MySQL。大部分 crud boy只知道
- 弄个随机数的东西,直接从网上找了一个现成的,简单看了两眼,感觉算法应该是对的,但今天测试下来,是不对的;网上大多数人用的写法是这样的:fun
- 转自: http://www.qqread.com/mysql/z442108305.html对于程序开发人员而言,目前使用最流行的两种后台
- 一、前言实现名片管理系统,首先要创建两个python file ,分别是cards_main.py和cards_tool.py,前一个是主代
- 相信很多学编程的人都对Vlookup函数不陌生,一些在excel中不方便处理的大量数据,用Python就可以轻松解决。下面介绍openpyx
- 通过python处理光斑图像1 相关包与图像读取首先需要科学计算必备包numpy和画图包matplotlib.pyplot,我们通过后者进行
- 一、背景主流被使用的地理坐标系并不统一,导致我们从不同平台下载的数据由于坐标系的差异往往对不齐。这个现象在多源数据处理的时候往往很常见,因此
- 前段时间因为忙一些其它的事情,分享的有些少,最近学习一下redis在Go语言开发中的应用。一、理论知识Redis是一个开源的、使用C语言编写
- 在工作中,有时会遇见需要将数字转换为条码的问题,每次都需要打开条码转换的网站,一次次的转换后截图,一两个还行,但是当需要转换的数量较多时,就
- 本文实例讲述了Python2.7中SQLite3基本操作方法。分享给大家供大家参考,具体如下:1、基本操作# -*- coding: utf
- 目录查找算法 -- 简介顺序查找二分查找插值查找斐波那契查找树表查找1、二叉树查找算法。2、平衡查找树之2-3查找树(2-3 Tree)3、
- 实现功能:删除当前目录下,除保留目录和文件外的所有文件和目录#!bin/env pythonimport osimport os.pathi
- python版本和ssl版本都会导致 requests在请求https网站时候会出一些错误,最好使用新版本。1 Python2.6x use
- 下面说说主要实现思路: 1、存取图片 (1)、将图片文件转换为二进制并直接存进sql server //UploadHelper.cs //
- 一、简介Supervisor 是一款 Python 开发的进程管理系统,允许用户监视和控制 Linux 上的进程,能将一个普通命令行进程变为
- 1 通过System.DBNull判断,网上大部分都使用这个方法。DataTable dt;
- # 从X和Y中取出相应步长对应的数组并保存至x_data和y_data中x_data = []y_data = []for i in ran
- 在SQL Server 2005中,它的另外一个强大的新特点是数据库快照。数据库快照是一个数据库的只读副本,它是数据库所有数据的映射,由快照