sys.excepthook(type, value, traceback)
- это функция, которая выполняет печать при возникновении исключения. Вы можете написать свою собственную функцию (с аналогичной подписью) и просто заменить ее на:
sys.excepthook = myfunction
В этой функции вы можете делать все, что захотите. Вы можете войти в файлы или, например, распечатать некоторую информацию о состоянии программы, когда произошло исключение. Вы можете даже организовать разные вещи в зависимости от типа исключения.
Однако, если все, что вы хотите сделать, это отформатировать сообщение трассировки, вам уже предоставлено множество удобных вещей. Подробности можно найти в документации traceback
, но вот пример, который дает примерно желаемый результат:
import sys, traceback
def myhook(type, value, tb):
trace = traceback.format_tb(tb, limit=1)
trace = trace[0].split("\n")[0]
exc = traceback.format_exception_only(type, value)[0]
print(trace + "\n" + exc)
sys.excepthook = myhook
number = "a1b2c3"
raise ValueError(f"Invalid input {number}")
, который дает результат:
File "scratch/so.py", line 14, in <module>
ValueError: Invalid input a1b2c3
Обратите особое внимание на использование traceback.format_tb
с limit=1
, чтобы ограничить вывод трассировки стека. Этих функций множество в модуле traceback
.