我正在使用Twister构建服务器。我也在维护服务器错误日志。问题是,如果我让异常一直向上运行,它会崩溃当前连接并断开用户连接,所以很明显我附加了一个裸,除了抓住其他所有内容。
一旦我发现了什么,是否有办法将回溯作为一个字符串,以便我可以将它存储在某个地方/自己打印而不提高它并让Python在程序崩溃时为我打印它?
答案 0 :(得分:2)
traceback模块包含一些帮助函数,用于打印和检查回溯(对于exameble,traceback.print_tb) - 但重要的是回溯信息本身存储在“interpreter global”变量中 - sys.exc_traceback,on模块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子句中将回溯打印到stdout。
答案 1 :(得分:1)
使用logging module,您可log the traceback到文件:
import logging
logging.basicConfig(level = logging.DEBUG, filename = logfile)
logger = logging.getLogger(__name__)
try:
1/0
except ZeroDivisionError as err:
logger.exception(err)
答案 2 :(得分: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 )
这应该可以解决问题并打印完整的堆栈跟踪。
答案 3 :(得分:0)
是的,那里有一个module。 traceback
模块包含打印或格式化异常信息的函数,或返回原始堆栈帧的功能,以便您可以随意使用它们。
对于一个相当复杂的应用程序,我实际上建议使用日志系统而不是普通的旧traceback
函数。特别是方法logging.Logger.exception
会将有关异常的信息写入您(或您的软件的用户)已配置的任何记录目标。默认格式化程序将打印出跟踪,就像Python在控制台上一样,但您可以通过创建Formatter
并覆盖format_exception
方法来自定义日志中的异常显示。如果您需要格式化异常输出,则重写的方法是调用traceback
函数的地方。