Se você já usou o TurboGears para criar aplicações, mesmo as mais simples, já se deparou com exceções levantadas por pequenos problemas como não enviar um dicionário de retorno para uma função. A resolução desses problemas na maioria das vezes é bem simples, você lê o erro reportado pelo tracebak, procura o arquivo, depois a linha, que gerou a exceção e conserta.
Mas você que tem uma aplicação um pouco mais crescida já deve ter tido problemas em que só olhar o traceback não resolveu, você teve que implantar vários trechos de código para verificar o que estava ocorrendo e provavelmente perdeu horas do seu dia tentando corrigir um erro que era simplesmente um espaço a mais em uma string.
Já faz um tempo que para tentar resolver esse problema eu sobrescrevi o método _cp_on_error do CherryPy fazendo com que toda exceção gerada pelo TurboGears que não fosse tratada, dispararia um email me informando do problema e o estado de algumas variáveis, por exemplor a sessão do CherryPy, naquele momento. Esse método de automatização de reportagem de erro ajudou a resolver muitos bugs, mas não ajudava em nada enquanto em desenvolvimento.
Hoje enquanto lia sobre profile do CherryPy descobri uma simples configuração, tg.fancy_exception, que faz milagres e com toda a certeza vai me ajuda na hora de “debugar” problemas durante o desenvolvimento, para habilitar:

Com essa configuração habilitada quando houver qualquer exceção não tratada, mesmo que você tenha sobrescrito o _cp_on_error, ao invés de um traceback em texto puro, será mostrado um traceback em HTML com algumas opções a mais:

A opção mais importante e interessante, ao meu ver, é uma shell do python que pode ser ativada clicando no “+” ao lado do contexto que você quer debugar:

Logo abaixo do traceback você ainda tem o botão “extra data” que mostra dados recebidos pelo CherryPy e mais abaixo em “text version” uma versão em texto puro do traceback e dados extras.
Eu recomendo a utilização do tg.fancy_exception somente em desenvolvimento pois dar um acesso a shell do Python para qualquer um pode ser perigoso, na verdade não sei se esta opção funciona em produção.







