A publicação de pzrq diz para usar:
str(e)
Era exatamente disso que eu precisava.
(Se você estiver em um ambiente unicode, parece que:
unicode(e)
funcionará e parece funcionar bem em um ambiente não unicode)
Pzrq disse muitas outras coisas boas, mas eu quase perdi a resposta devido a todas as coisas boas. Como não tenho 50 pontos, não posso comentar a resposta deles para tentar chamar a atenção para a solução simples que funciona, e como não tenho 15, não posso votar nessa resposta, mas posso postar (parece atrasado, mas oh bem) - então aqui estou postando - provavelmente perdem pontos por isso ...
Como o meu objetivo é chamar a atenção para a resposta do pzrq, por favor, não encha o olho e perca tudo isso abaixo. as primeiras linhas deste post são as mais importantes.
Minha história:
O problema para o qual vim aqui foi se você deseja capturar uma exceção de uma classe que não tem controle - e então ??? Certamente não vou subclassificar todas as classes possíveis que meu código usa para tentar obter uma mensagem de todas as possíveis exceções!
Eu estava usando:
except Exception as e:
print '%s (%s)' % (e.message,type(e))
que, como todos sabemos agora, dá o aviso que o OP perguntou sobre (o que me trouxe aqui), e este, que o pzrq fornece como uma maneira de fazê-lo:
except Exception as e:
print '%s (%s)' % (str(e),type(e))
nao fiz.
Não estou em um ambiente unicode, mas a resposta de jjc me fez pensar, então tive que tentar. Nesse contexto, isso se torna:
except Exception as e:
print '%s (%s)' % (unicode(e),type(e))
que, para minha surpresa, funcionou exatamente como str (e) - então agora é isso que estou usando.
Não sei se 'str (e) / unicode (e)' é a 'maneira Python aprovada', e provavelmente vou descobrir por que isso não é bom quando chego ao 3.0, mas esperamos que a capacidade de lidar com um exceção inesperada (*) sem morrer e ainda assim obter algumas informações, nunca desaparecerá ...
(*) Hmm. "exceção inesperada" - acho que gaguejei!