使用traceback追踪异常

调试代码的时候,简单的try—except语句只能告诉我们哪里出了错,但是错误的根源可能在多个函数之前,所以我们有必要知道出现错误时的堆栈情况。python提供了traceback模块来帮助我们打印堆栈。

一般来说程序都是将信息写入log,所以这里以写入log为例

import class
import logging

if __name__=="__main__":
    logging.basicConfig(filename='trace.log')
    try:
        excep_class.except_fun(excep_args)
    except:
        s=traceback.format_exc()
        logging.error(s)

这样就可以打印出程序发生异常时,堆栈的信息。

---Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/keystoneclient/middleware/auth_token.py", line 578, in __call__
    token_info = self._validate_user_token(user_token, env)
  File "/usr/lib/python2.7/dist-packages/keystoneclient/middleware/auth_token.py", line 838, in _validate_user_token
    raise InvalidUserToken('Token authorization failed')
InvalidUserToken: Token authorization failed

这里是一段出错信息,可以明显地看出,最上面的是最早调用的函数,上面的函数调用下面的函数,最后一个是最终出错的地方。