[英]Python tracebacks, how to hide absolute paths?
我想知道是否有一种简单的方法可以防止 Python 回溯在出现错误时打印文件的完整路径。 例如,下面的回溯打印生成异常的文件的绝对路径:
Traceback (most recent call last):
File "C:/Users/user/Documents/project/project_align/src/main.py", line 62, in <module>
raise Exception
Exception
我希望它只打印相对路径: project_align/src/main.py
某处是否有配置参数来强制执行此操作?
我不知道是否有一个标志可以做到这一点,但如果你真的想要,你可以用你自己的函数覆盖 sys.excepthook,你可以在其中拆开现有的回溯,从框架摘要中删除所有文件名,以及打印回来
import os
import sys
import traceback
from traceback import StackSummary
def handler(_exception_type, _value, t):
# extract the stack summary
summary = traceback.extract_tb(t)
# replace file names for each frame summary
for frame_summary in summary:
filename = frame_summary.filename
frame_summary.filename = os.path.relpath(filename)
# rebuild the traceback
print(''.join(traceback.format_list(StackSummary.from_list(summary))), file=sys.stderr)
sys.excepthook = handler
def crashes_hard():
print(1 / 0)
def crashes():
crashes_hard()
crashes()
这与原始回溯不完全相同,我不知道是否有办法从堆栈摘要构建回溯,但我认为可以单独打印异常名称等以模拟原始错误
File "scratch_1.py", line 31, in <module>
crashes()
File "scratch_1.py", line 28, in crashes
crashes_hard()
File "scratch_1.py", line 24, in crashes_hard
print(1 / 0)
原始输出是
Traceback (most recent call last):
File "/home/abhijat/.config/.../scratches/scratch_1.py", line 31, in <module>
crashes()
File "/home/abhijat/.config/.../scratches/scratch_1.py", line 28, in crashes
crashes_hard()
File "/home/abhijat/.config/.../scratches/scratch_1.py", line 24, in crashes_hard
print(1 / 0)
ZeroDivisionError: division by zero
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.