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()

到此这篇关于Python捕获异常堆栈信息的几种方法(小结)的文章就介绍到这了,更多相关Python捕获异常堆栈信息内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用Python将Exception异常错误堆栈信息写入日志文件

    假设需要把发生异常错误的信息写入到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: #方案一,自己定义一个文件,自己把错误堆栈信息写入文件. #er

  • 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))

  • Python如何截图保存的三种方法(小结)

    本文介绍python如何进行截图保存的几种方法,在测试过程中,是有必要截图,特别是遇到错误的时候进行截图.结合Python其它模块如time ,os.path,基本能满足截图保存文件的功能需求 第一种 selenium for python get_screenshot_as_file() 相关代码如下: # coding=utf-8 import time from selenium import webdriver driver = webdriver.Chrome() driver.max

  • Python 循环终止语句的三种方法小结

    在Python循环终止语句有三种: 1.break break用于退出本层循环 示例如下: while True: print "123" break print "456" 2.continue continue为退出本次循环,继续下次循环 示例如下: while True: print "123" continue print "456" 3.自定义标记 Tag 自已定义一个标记为True或False 示例代码: Tag

  • Python实现平行坐标图的两种方法小结

    平行坐标图,一种数据可视化的方式.以多个垂直平行的坐标轴表示多个维度,以维度上的刻度表示在该属性上对应值,相连而得的一个折线表示一个样本,以不同颜色区分类别. 但是很可惜,才疏学浅,没办法在Python里实现不同颜色来区分不同的类别.如果对此比较在意的大神可以不要往下看了......... 上图是一个基于iris数据集所画的一个平行坐标图. 隔开隔开.......................................隔开隔开 不多扯了,下面正式上代码 方法一.基于pyecharts第三

  • Python实现矩阵相乘的三种方法小结

    问题描述 分别实现矩阵相乘的3种算法,比较三种算法在矩阵大小分别为22∗2222∗22, 23∗2323∗23, 24∗2424∗24, 25∗2525∗25, 26∗2626∗26, 27∗2727∗27, 28∗2828∗28, 29∗2929∗29时的运行时间与MATLAB自带的矩阵相乘的运行时间,绘制时间对比图. 解题方法 本文采用了以下方法进行求值:矩阵计算法.定义法.分治法和Strassen方法.这里我们使用Matlab以及Python对这个问题进行处理,比较两种语言在一样的条件下,

  • Python中取整的几种方法小结

    前言 对每位程序员来说,在编程过程中数据处理是不可避免的,很多时候都需要根据需求把获取到的数据进行处理,取整则是最基本的数据处理.取整的方式则包括向下取整.四舍五入.向上取整等等.下面就来看看在Python中取整的几种方法吧. 1.向下取整 向下取整直接用内建的 int() 函数即可: >>> a = 3.75 >>> int(a) 3 2.四舍五入 对数字进行四舍五入用 round() 函数: >>> round(3.25); round(4.85)

  • 分割python多空格字符串的两种方法小结

    目录 分割python多空格字符串 做法 第一种做法 第二种做法 如何分割字符串 1.按空格分割 2.分割+最大分割 3.用#分割 分割python多空格字符串 这篇文章需要处理的问题就是: 一个字符串被多个不同长度的空白分割,我需要把空格去掉,留下有用的信息形成一个列表 如:"aa bbbbb ccc d" ---->['aa', 'bbbbb', 'ccc', 'd'] 做法 1.str.split() 2.filter(None,str.split(" "

  • Python 图像对比度增强的几种方法(小结)

    图像处理工具--灰度直方图 灰度直方图时图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率. 例子:矩阵 图片来自网络,侵删! 上面图片的灰度直方图 python实现 #!usr/bin/env python #-*- coding:utf-8 _*- """ @author:Sui yue @describe: 灰度直方图,描述每个灰度级在图像矩阵中的像素个数或者占有率 @time: 2019/09/15 """ import

  • python中列表添加的四种方法小结

    目录 列表的添加 1)+ 添加 2)append 追加 3)extend 拉伸 4)insert 插入 在列表指定位置添加元素 列表的添加 1)+ 添加 2)append 追加 一次只能添加一个元素到列表中,适合用于循环里 3)extend 拉伸 可一次添加多个元素到列表中 4)insert 插入 append与extend都是添加在最后,insert可以插入在指定位置 命令 作用 service.insert(n,’ ') 将’'中的内容,插入到第n个之后 service.insert(1,‘

  • 让Python脚本暂停执行的几种方法(小结)

    1.time.sleep(secs) 参考文档原文: Suspend execution for the given number of seconds. The argument may be a floating point number to indicate a more precise sleep time. The actual suspension time may be less than that requested because any caught signal will

随机推荐