Python如何美化堆栈(Stack)信息
摘要:Python如何美化堆栈(Stack)信息 Python 是一种使用广泛的编程语言,但是当程序出现异常时,Python 默认的堆栈信息输出并不够友好,难以快速定位问题。为了解决这个问题,Python 社区开发了许多第三方库来美化堆栈信息的输...
Python如何美化堆栈(Stack)信息
Python 是一种使用广泛的编程语言,但是当程序出现异常时,Python 默认的堆栈信息输出并不够友好,难以快速定位问题。为了解决这个问题,Python 社区开发了许多第三方库来美化堆栈信息的输出,其中比较流行的一个是 pretty_errors
库。
本文将介绍如何使用 pretty_errors
库来美化 Python 的堆栈信息输出。
安装
可以使用 pip
来安装 pretty_errors
库;
pip install pretty_errors
使用
未使用时;
def func_1():
raise Exception('This is some exception.')
def func_2():
func_1()
def main():
func_2()
if __name__ == '__main__':
main()
直接在代码中导入 pretty_errors
;
import pretty_errors
使用pretty_errors之后;
import pretty_errors
def func_1():
raise Exception('This is some exception.')
def func_2():
func_1()
def main():
func_2()
if __name__ == '__main__':
main()
可以看到,输出的堆栈信息已经被美化了,更加易读,更多关于它的配置转到:https://pypi.org/project/pretty-errors/
如何不使用pretty-errors自定义Hook堆栈Stack
pretty_errors
的原理是重写Python的sys.excepthook
方法,Python的所有异常解释器最后都会调用sys.excepthook()
并传入3个变量:异常类型、异常实例和Traceback对象,如果想自定义sys.excepthook()
被调用时的行为,可以自定义一个接受3个自变量函数给sys.excepthook
,以下是一个最简单的示例;
import sys
def exception_hook(types, value, traceback):
sys.stderr.write('%s: %s\n' % (types.__name__, value))
sys.excepthook = exception_hook
def func_1():
raise Exception('This is some exception.')
def func_2():
func_1()
def main():
func_2()
if __name__ == '__main__':
main()