最近做项目的时候遇到了一个比较无语的问题,出bug了,但是给出的出错信息只有一条Android的权限信息,无法得知出错的代码位置在哪,排查起来工作量就变大了。除了项目本身的问题,就是自己没有注意使用try catch来捕获异常,加上平时写的捕获异常信息也比较模糊,这个会给后面的排查工作带来一定的影响,经过师兄的提醒后,发现可以trackback来获得更详细的异常信息。
简单的异常处理
简单的异常处理比如:
try:
pass
except Exception, e:
print e
这样捕获到的异常信息的信息量实际上不足以满足项目的需求,我们不能得知具体出错的代码是哪一行。因此,需要一个打印更详细的异常信息的办法,这就引出了traceback。
traceback
import traceback
....
try:
i = int('a')
except Exception, e:
print 'str(Exception):\t', str(Exception)
print 'str(e):\t\t', str(e)
print 'repr(e):\t', repr(e)
print 'e.message:\t', e.message
print 'traceback.print_exc():'; traceback.print_exc()
print 'traceback.format_exc():\n%s' % traceback.format_exc()
traceback.print_exc() 会直接打印出异常信息, traceback.format_exc() 会返回异常信息的字符串。根据项目原先的代码结构,我使用了traceback.format_exc()配合logging.error()来打印异常信息。这个返回的异常信息包括了发生异常的详细信息,比如定位代码行数,异常的原因。这个可以帮助开发者较快的发现问题所在。