python traceback捕获并打印异常的方法

异常处理是日常操作了,但是有时候不能只能打印我们处理的结果,还需要将我们的异常打印出来,这样更直观的显示错误

下面来介绍traceback模块来进行处理

  try:
    1/0
  except Exception, e:
    print e

输出结果是integer division or modulo by zero,只知道是报了这个错,但是却不知道在哪个文件哪个函数哪一行报的错。

使用traceback

  try:
    1/0
  except Exception, e:
    traceback.print_exc()

输出结果

Traceback (most recent call last):

File "test_traceback.py", line 3, in <module>

1/0

ZeroDivisionError: integer division or modulo by zero

这样非常直观有利于调试。

traceback.print_exc()跟traceback.format_exc()有什么区别呢?

format_exc()返回字符串,print_exc()则直接给打印出来。

即traceback.print_exc()与print traceback.format_exc()效果是一样的。

print_exc()还可以接受file参数直接写入到一个文件。比如

traceback.print_exc(file=open('tb.txt','w+'))

写入到tb.txt文件去。

示例

# -*- coding:utf-8 -*-

import os
import logging
import traceback

#设置log, 这里使用默认log
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='[%Y-%m_%d %H:%M:%S]',
    filename=os.path.dirname(os.path.realpath(__file__)) + "/" + 'test.log',
    filemode='a')

a=10
b=0 #设置为0, 走异常流程; 否则, 走正常流程

try:
  res=a/b
  logging.info("exec success, res:" + str(res))
except Exception,e:
  #format_exc()返回字符串,print_exc()则直接给打印出来
  traceback.print_exc()
  logging.warning("exec failed, failed msg:" + traceback.format_exc())

logging默认打印级别是warning.

日志打印:

[2017-11_17 07:51:02] trace.py[line:24] WARNING exec failed, failed msg:Traceback (most recent call last):

File "trace.py", line 19, in <module>

res=a/b

ZeroDivisionError: integer division or modulo by zero

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python中使用logging和traceback模块记录日志和跟踪异常

    logging模块 logging模块用于输出运行日志,可以设置不同的日志等级,保存信息到日志文件中等. 相比print,logging可以设置日志的等级,控制在发布版本中的输出内容,并且可以指定日志的输出格式. 1. 使用logging在终端输出日志 #!/usr/bin/env python # -*- coding:utf-8 -*- import logging # 引入logging模块 # 设置打印日志级别 CRITICAL > ERROR > WARNING > INFO

  • 浅谈Python traceback的优雅处理

    刚接触Python的时候,简单的异常处理已经可以帮助我们解决大多数问题,但是随着逐渐地深入,我们会发现有很多情况下简单的异常处理已经无法解决问题了,如下代码,单纯的打印异常所能提供的信息会非常有限. def func1(): raise Exception("--func1 exception--") def main(): try: func1() except Exception as e: print e if __name__ == '__main__': main() 执行后

  • Python异常处理总结

    本文较为详细的罗列了Python常见的异常处理,供大家参考,具体如下: 1. 抛出异常和自定义异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行. ①.raise 语句 Python中的raise 关键字用于引发一个异常,基本上和C#和Java中的throw关键字相同,如下所示: # -- coding: utf-8 -- def ThorwErr()

  • Python异常模块traceback用法实例分析

    本文实例讲述了Python异常模块traceback用法.分享给大家供大家参考,具体如下: traceback模块被用来跟踪异常返回信息. 如下例所示: import traceback try: raise SyntaxError, "traceback test" except: traceback.print_exc() 将会在控制台输出类似结果: Traceback (most recent call last):   File "H:PythonWorkSpaceT

  • python中的五种异常处理机制介绍

    从几年前开始学习编程直到现在,一直对程序中的异常处理怀有恐惧和排斥心理.之所以这样,是因为不了解.这次攻python,首先把自己最畏惧和最不熟悉的几块内容列出来,里面就有「异常处理」这一项. <Dive into Python>并没有专门介绍异常处理,只是例子中用到的时候略微说明了一下.今天下载<Learn Python>,直接进异常处理这块.这一部分有四章,第一章讲解异常处理的一般使用方法,后面的章节深入地讨论其机制.我目前只看了第一章,先学会用,以后有必要的时候再扩展阅读. p

  • 浅谈python抛出异常、自定义异常, 传递异常

    一. 抛出异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行. raise 语句 Python中的raise 关键字用于引发一个异常,基本上和C#和Java中的throw关键字相同,如下所示: import traceback def throw_error(): raise Exception("抛出一个异常")#异常被抛出,print函数

  • Python 异常处理实例详解

    一.什么是异常?异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行.二.异常处理捕捉异常可以使用try/except语句.try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理.如果你不想在异常发生时结束你的程序,只需在try里捕获它. 异常语法:以下为简单的try....

  • Python3中类、模块、错误与异常、文件的简易教程

    和旧版的Python 2.7教程相比,新增内容包括: 新增命名关键字参数的使用: 新增StringIO和BytesIO: 新增datetime的使用: 新增urllib的使用: 新增枚举类型的使用: 新增virtualenv的使用: 新增asyncio编程: 新增aiohttp编程: 实战的Web App已完全基于asyncio重写. 本文将详细给大家介绍Python3中类.模块.错误与异常.文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 类 面向对象设计思想是

  • Python学习笔记之读取文件、OS模块、异常处理、with as语法示例

    本文实例讲述了Python学习笔记之读取文件.OS模块.异常处理.with as语法.分享给大家供大家参考,具体如下: 文件读取 #读取文件 f = open("test.txt","r") print(f.read()) #打印文件内容 #关闭文件 f.close() 获取文件绝对路径:OS模块 os.environ["xxx"]  获取系统环境变量 os.getcwd 获取当前python脚本工作路径 os.getpid() 获取当前进程ID

  • 深入理解python try异常处理机制

    深入理解python try异常处理机制 #python的try语句有两种风格 #一:种是处理异常(try/except/else) #二:种是无论是否发生异常都将执行最后的代码(try/finally) try/except/else风格 try: <语句> #运行别的代码 except <名字>: <语句> #如果在try部份引发了'name'异常 except <名字>,<数据>: <语句> #如果引发了'name'异常,获得附

  • 搞清楚 Python traceback的具体使用方法

    1. Python中的异常栈跟踪 之前在做Java的时候,异常对象默认就包含stacktrace相关的信息,通过异常对象的相关方法printStackTrace()和getStackTrace()等方法就可以取到异常栈信息,能打印到log辅助调试或者做一些别的事情.但是到了Python,在2.x中,异常对象可以是任何对象,经常看到很多代码是直接raise一个字符串出来,因此就不能像Java那样方便的获取异常栈了,因为异常对象和异常栈是分开的.而多数Python语言的书籍上重点在于描述Python

随机推荐