Ответ 1
Короткий путь использует модуль sys
и использует эту команду:
sys.tracebacklimit = 0
Используйте флаг для определения поведения.
Пример:
>>> import sys
>>> sys.tracebacklimit=0
>>> int('a')
ValueError: invalid literal for int() with base 10: 'a'
Лучше всего использовать и hook > :
def exception_handler(exception_type, exception, traceback):
# All your trace are belong to us!
# your format
print "%s: %s" % (exception_type.__name__, exception)
sys.excepthook = exception_handler
Изменить:
Если вам по-прежнему нужна опция возврата к исходному крюку:
def exception_handler(exception_type, exception, traceback, debug_hook=sys.excepthook):
if _your_debug_flag_here:
debug_hook(exception_type, exception, traceback)
else:
print "%s: %s" % (exception_type.__name__, exception)
Теперь вы можете передать крючок отладки обработчику, но вы, скорее всего, захотите всегда использовать тот, который был создан в sys.excepthook
(поэтому ничего не пропускайте в debug_hook
). Python связывает аргументы по умолчанию один раз во время определения (общая ошибка), что делает это всегда работать с тем же оригинальным обработчиком, перед заменой.