Para responder à pergunta do Sr. Zeus discutida na seção de comentários da resposta aceita, eu uso isso para registrar exceções não capturadas em um console interativo (testado com o PyCharm 2018-2019). Eu descobri sys.excepthook
que não funciona em um shell python, então eu olhei mais fundo e descobri que poderia usá-lo sys.exc_info
. No entanto, sys.exc_info
não há argumentos diferentes dos sys.excepthook
três argumentos.
Aqui, eu uso os dois sys.excepthook
e sys.exc_info
para registrar as exceções em um console interativo e um script com uma função de wrapper. Para anexar uma função de gancho a ambas as funções, tenho duas interfaces diferentes, dependendo se argumentos são fornecidos ou não.
Aqui está o código:
def log_exception(exctype, value, traceback):
logger.error("Uncaught exception occurred!",
exc_info=(exctype, value, traceback))
def attach_hook(hook_func, run_func):
def inner(*args, **kwargs):
if not (args or kwargs):
# This condition is for sys.exc_info
local_args = run_func()
hook_func(*local_args)
else:
# This condition is for sys.excepthook
hook_func(*args, **kwargs)
return run_func(*args, **kwargs)
return inner
sys.exc_info = attach_hook(log_exception, sys.exc_info)
sys.excepthook = attach_hook(log_exception, sys.excepthook)
A configuração do registro pode ser encontrada na resposta de gnu_lorien.