针对“python打印完整异常问题”的解决方案,我们可以采取以下步骤:
1.如何定位异常
当 python 程序抛出异常时,它会显示异常类型和一些与其相关的错误信息,但通常这些信息十分简洁,难以找到问题所在。因此,我们需要通过打印调用堆栈,定位发生异常的位置。
我们可以使用 python 内置的 traceback 模块打印异常调用堆栈信息。具体方法如下:
import traceback
try:
# some buggy code here
except Exception:
traceback.print_exc()
这样就可以打印出完整的异常栈信息,包括异常类型和对应的错误信息。
2.如何输出完整的异常信息
使用 traceback 模块可以打印出异常的调用堆栈信息,但是还有一些其他的信息在默认情况下是无法打印出来的,例如调用栈上报的参数以及函数中定义的变量等。为了输出这些信息,我们需要使用第三方模块 prettyprinter
。
prettyprinter
可以以更加可读的方式显示输出,可以输出完整的异常信息。具体使用方法如下:
import traceback
from prettyprinter import pprint
try:
# some buggy code here
except Exception as e:
pprint(traceback.extract_tb(e.__traceback__))
以上代码会使用prettyprinter
的pprint方法打印出完整的异常信息,包括异常类型、错误信息以及完整的调用栈。可以帮助我们更好的定位问题位置和问题原因。
示例说明
下面,我们以两个示例来说明如何使用上述技巧解决异常问题:
示例一
import traceback
def func():
raise Exception('Some error')
try:
func()
except Exception:
traceback.print_exc()
上述程序运行会输出如下错误信息:
Traceback (most recent call last):
File "test.py", line 6, in <module>
func()
File "test.py", line 4, in func
raise Exception('Some error')
Exception: Some error
由于默认情况下异常信息比较简略,不太容易定位出问题所在。因此我们可以加入 try-except 块,并用 traceback 模块打印出完整的异常栈信息,如下:
import traceback
def func():
raise Exception('Some error')
try:
func()
except Exception:
traceback.print_exc()
运行程序之后,会得到更加详细的异常信息:
Traceback (most recent call last):
File "test.py", line 9, in <module>
func()
File "test.py", line 6, in func
raise Exception('Some error')
Exception: Some error
通过打印完整的异常信息,我们可以清楚地看到,问题出在 func() 函数中。
示例二
import traceback
from prettyprinter import pprint
def func(a, b):
c = a + b
raise Exception('Some error')
try:
func(1, 2)
except Exception as e:
pprint(traceback.extract_tb(e.__traceback__))
上述程序运行会输出如下错误信息:
[(<string>, 11, '<module>', 'func(1, 2)'),
(<string>, 6, 'func', 'raise Exception(\'Some error\')')]
Traceback (most recent call last):
File "<string>", line 11, in <module>
Exception: Some error
由于 prettyprinter 可以完整展现调用栈,我们可以看到调用栈中传入的参数及其取值,以及在函数中定义的变量。例如上述程序中的参数 a 和 b 的取值,以及中间变量 c 的取值。这有助于我们更快速的定位问题所在。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 打印完整异常问题 - Python技术站