有沒有辦法只顯示重要的目錄路徑執行python程序時?python3:不顯示完整的目錄路徑上的錯誤消息
目前,我得到這個:
python3 foo.py
Traceback (most recent call last):
File "foo.py", line 60, in <module>
foo = Foo()
File "foo.py", line 22, in __init__
self._run()
File "/media/MyDocuments/xxxxxxx/yyyyyyyyy/python_code/foo.py", line 18, in check_input
bar = obj.get_action()
AttributeError: 'obj' object has no attribute 'get_action'
因爲我知道在哪個目錄下我的代碼是,完整的目錄,使剛剛更糟可讀的錯誤消息。我可以告訴python向我展示更多這樣的輸出嗎?
python3 foo.py
Traceback (most recent call last):
File "foo.py", line 60, in <module>
foo = Foo()
File "foo.py", line 22, in __init__
self._run()
File ".../foo.py", line 18, in check_input
bar = obj.get_action()
AttributeError: 'obj' object has no attribute 'get_action'
回答
運用unutbu我添加了色彩的一些線路,萬一有人代碼尋找一種簡單的改進解釋輸出,只需用這個作爲模塊並導入它:
import sys
import traceback
import os
import re
RED = '\033[91m'
GREEN = '\033[92m'
YELLOW = '\033[93m'
LIGHT_PURPLE = '\033[94m'
PURPLE = '\033[95m'
CYAN = '\033[96m'
END = '\033[0m'
def my_excepthook(type, value, tb):
lines = traceback.format_list(traceback.extract_tb(tb))
def shorten(match):
return 'File "{}"'.format(os.path.basename(match.group(1)))
lines = [re.sub(r'File "([^"]+)"', shorten, line) for line in lines]
_print_color(lines)
# print(''.join(lines))
print(RED + '{}: {}'.format(type.__name__, value) + END)
sys.excepthook = my_excepthook
def _print_color(lines):
for l in lines:
for i in range(len(l)-1):
if l[i:i+5]=="line ":
i +=5
# Find the length of the number
numLen = 0
while l[i+numLen].isdigit():
numLen +=1
# Find the length of the function
funLen = 0
while not l[i+numLen+4 + funLen]=="\n":
funLen+=1
l = ''.join([l[:i],
YELLOW+"{}".format(l[i:i+numLen])+END,
l[i+numLen:i+numLen+5],
LIGHT_PURPLE+"{}".format(l[i+numLen+5:i+numLen+5+funLen])+END,
CYAN+"{}".format(l[i+numLen+5+funLen:])+END])
print(l,end="")
break
print("")
你能提供一個短暫的,完整的程序,產生一團糟這樣的年齡?我無法複製您的結果 - 我的所有回溯都會顯示「foo.py」,就像回溯的前兩行一樣。 –
我所有的代碼都保存在同一個目錄中,因此任何示例都會在我的計算機上產生這種錯誤消息。我使用Ubuntu,python3,也許另一個操作系統使用不同的標準python解釋器。 – Jonas