簡體   English   中英

Python回溯,如何隱藏絕對路徑?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM