【Python进阶】异常定位

本文环境

win7_64 + Python 2.7.10

异常定位

我们定义一个文件test.py

import sys

def f1():
    f2()
    
def f2():
    a = 1
    b = 0
    return a / b # Exception,这里是本文件的第九行
    
def main():
    f1()
    
main()

当我们运行的时候,会出现如下错误:

Traceback (most recent call last):
  File "test.py", line 14, in <module>
    main()
  File "test.py", line 12, in main
    f1()
  File "test.py", line 4, in f1
    f2()
  File "test.py", line 9, in f2
    return a / b # Exception
ZeroDivisionError: integer division or modulo by zero

其中最后一个表示了在test.py文件的第九行出现了错误

再看下面的try...except语句

import sys

def f1():
    f2()
    
def f2():
    a = 1
    b = 0
    return a / b # Exception
    
def main():
    f1()
    
try:
    main()
except Exception as e:
    print(e)

一般情况下,我们通过try...except语句捕获异常后,只获取到了异常的值(例子中的e),此时我们看不出来到底是哪里引发的异常,python提供了traceback模块用于异常地位,可以方便的打印异常引发的信息。
t.py

def f2():
    a = 1
    b = 0
    return a / b # Exception

test.py

import sys
import t
import traceback

def f1():
    t.f2()
    
def main():
    f1()
    
try:
    main()
except Exception as e:
    traceback.print_exc()

执行结果:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    main()
  File "test.py", line 9, in main
    f1()
  File "test.py", line 6, in f1
    t.f2()
  File "C:\Users\linlei\Desktop\t.py", line 4, in f2
    return a / b # Exception
ZeroDivisionError: integer division or modulo by zero

总结

  1. 通过traceback模块的print_exc()函数,可以快速的定位引发异常的地点,对于try...except语句里面定位异常很有用。
  2. 当然我们还可以通过sys模块的exc_traceback对象或者exc_info()来获取更多有效的信息,会有单独的文章来描述
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试pyth...
    _宁采臣阅读 1,039评论 0 10
  • 调试Python程序时,经常会报出一些异常,异常的原因一方面可能是写程序时由于疏忽或者考虑不全造成了错误,这时就需...
    有可能_666阅读 561评论 0 0
  • Python异常处理 异常概念: 异常:就是不正常的情况,程序开发过程中错误和BUG都是补充正常的情况 异常发生的...
    youngkun阅读 944评论 0 4
  • 定义类并创建实例 在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类...
    绩重KF阅读 3,999评论 0 13
  • 由于对阅读感兴趣,关于阅读的书都希望能看一下,看看有没有什么法宝或捷径可以指导我阅读和教阅读。 由于登机还有点时间...
    樱语之行阅读 227评论 0 0