我正在使用Twister构建服务器。同时我也在维护服务器的错误日志。问题在于,如果我让一个异常一路运行到栈底,它将会导致当前连接崩溃并断开用户的连接,因此我显然会附加一个裸的except来捕获其他所有异常。
一旦我捕获了某些异常,是否有一种方法将回溯作为字符串获取,以便我可以存储它或自己打印它,而不会引发它并让Python在程序崩溃时为我打印?
一旦我捕获了某些异常,是否有一种方法将回溯作为字符串获取,以便我可以存储它或自己打印它,而不会引发它并让Python在程序崩溃时为我打印?
试试这个:
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 )
这应该可以解决问题,并打印完整的堆栈跟踪。
没错,有一个模块可以做到这一点。 traceback
模块包含打印或格式化异常信息的函数,或者返回原始堆栈帧,以便您可以对它们进行任何操作。
对于一个相当复杂的应用程序,我实际上建议使用日志记录系统,而不是普通的 traceback
函数。特别是方法 logging.Logger.exception
将向您(或您软件的用户)配置的任何日志记录目标写入有关异常的信息。默认格式化程序将只打印出回溯,就像 Python 在控制台上一样,但是您可以通过创建 Formatter
并覆盖 format_exception
方法来自定义日志中的异常显示。如果您需要使用它们来格式化异常输出,则重写的方法是调用 traceback
函数的地方。