获取异常的回溯而不重新抛出它们
我正在用Twister搭建一个服务器,同时也在维护一个服务器错误日志。问题是,如果我让一个异常(错误)一直向上抛出,它会导致当前的连接崩溃,用户就会断开连接。所以我当然会用一个简单的except来捕捉所有其他的错误。
一旦我捕捉到一个错误,有没有办法把错误的追踪信息(也就是错误发生的过程)作为字符串获取,这样我可以自己存储或者打印,而不是让Python在程序崩溃时自动打印出来?
4 个回答
1
试试这个:
import traceback, sys
try:
# Do something that might raise an exception
open("/does not exist",'rb')
except:
traceback.print_exc( file=sys.stderr )
# Or
traceback.print_exc( file=your_open_log_file )
这样做应该可以解决问题,并且还会打印出完整的错误信息。
2
traceback模块里有一些小工具,可以帮助我们打印和查看错误信息(比如,traceback.print_tb)。不过最重要的是,错误信息本身是存储在一个叫“解释器全局”变量里的,这个变量是sys.exc_traceback,位于sys模块中。
引用自:
http://docs.python.org/reference/compound_stmts.html#try
在执行except语句块之前,关于异常的详细信息会被分配给sys模块中的三个变量: sys.exc_type用来接收异常的类型; sys.exc_value用来接收异常的参数;sys.exc_traceback 用来接收一个错误追踪对象...
你可以把sys.exc_traceback这个对象作为参数传给traceback.print_tb,这样就可以在except语句块中把错误信息打印到标准输出上。