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
0
投稿
猜你喜欢
- 启动sql server Net Start MSSqlServer 暂停sql server Net Pause MSSqlServer
- javascript sort()排序用法sort() 方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串UniCode码。
- 本文实例讲述了PHP使用星号隐藏用户名,手机和邮箱的实现方法。分享给大家供大家参考,具体如下:PHP使用星号替代用户名手机和邮箱这个在许多的
- 论证完使用target=_blank并非绝对错误之后,分场景探讨如何减少新开窗口。自有意识注意这个问题,是看到蓝色经典Plod大叔在04年提
- 包括安装时提示有挂起的操作、收缩数据库、压缩数据库、转移数据库给新用户以已存在用户权限、检查备份集、修复数据库等。 (一)挂起操作在安装S
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- ThinkPHP支持多种php模板引擎,可以根据个人需要加以配置。下面我们以Smarty模板引擎为例,给大家说说具体的操作流程!首先去Sma
- 本文主要介绍了Python3中PyQt5简单实现文件打开及保存,分享给大家,具体如下:# -*- coding: utf-8 -*-# Fo
- <? // 建立一个指向新COM组件的索引 $word = new C
- 内容摘要:本文介绍了使用SQL语句修改数据记录的两种方法,一是使用rs.update,二是使用conn.Execute(sql),相信对初学
- 1.普通的输出:print(str)#str是任意一个字符串,数字···2.格式化输出: print('1,2,%s,%d'
- 游戏说明:一个考验您记忆力的游戏,只要两个方块的;图案能够凑成一对,最终翻开所有的图片,那么您就获胜,计算机将自动记录您的游戏时
- 复制代码 代码如下: public partial class CMS_DBDataContext { partial void OnCre
- 1. 横排往下会影响阅读速度。如12345678的单排单列数字,肯定是竖排阅读快。但多行多列的整块信息,横排并不见得就比竖排慢,比如所有简体
- 本文实例讲述了php防止sql注入中过滤分页参数的方法。分享给大家供大家参考。具体分析如下:就网络安全而言,在网络上不要相信任何输入信息,对
- 在平常的一些的小规模的数据的过滤、清洗过程中使用最多的就是正则表达式,但是随着数据规模的增大,正则表达式就显得有些心有余力不足了。正则表达式
- 什么是冗余字段?在设计数据库时,某一字段属于一个表,但它又同时出现在另一个或多个表,且完全等同于它在其本来所属表的意义表示,那么这个字段就是
- web2.0教程4:如何调用css样式表 这些技巧主要讲meta标签设置的,其实与符合web标准关系不大,只要注意在最后加"/&q
- Selenium简介Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界
- 矩阵相乘需要前面矩阵的行数与后面矩阵的列数相同方可相乘。第一步,先将前面矩阵的每一行分别与后面矩阵的列相乘,作为结果矩阵的行列;第二步算出结