Le message de pzrq dit d'utiliser:
str(e)
C'était exactement ce dont j'avais besoin.
(Si vous êtes dans un environnement Unicode, il semble que:
unicode(e)
fonctionnera, et cela semble fonctionner correctement dans un environnement non-unicode)
Pzrq a dit beaucoup d'autres bonnes choses, mais j'ai failli manquer leur réponse à cause de toutes les bonnes choses. Comme je n'ai pas 50 points, je ne peux pas commenter leur réponse pour tenter d'attirer l'attention sur la solution simple qui fonctionne, et comme je n'en ai pas 15, je ne peux pas voter pour cette réponse, mais je peux poster (je me sens en arrière, mais eh bien) - alors ici je poste - probablement perdre des points pour ça ...
Étant donné que mon objectif est d'attirer l'attention sur la réponse de pzrq, veuillez ne pas le glacer et le manquer dans tout ce qui suit. les premières lignes de cet article sont les plus importantes.
Mon histoire:
Le problème pour lequel je suis venu ici était si vous vouliez attraper une exception d'une classe sur laquelle vous n'avez aucun contrôle - que faire alors ??? Je ne vais certainement pas sous-classer toutes les classes possibles que mon code utilise pour tenter d'obtenir un message de toutes les exceptions possibles!
J'utilisais:
except Exception as e:
print '%s (%s)' % (e.message,type(e))
qui, comme nous le savons tous maintenant, donne l'avertissement OP demandé (qui m'a amené ici), et ce, que pzrq donne comme moyen de le faire:
except Exception as e:
print '%s (%s)' % (str(e),type(e))
pas.
Je ne suis pas dans un environnement unicode, mais la réponse de jjc m'a fait me demander, alors j'ai dû l'essayer. Dans ce contexte, cela devient:
except Exception as e:
print '%s (%s)' % (unicode(e),type(e))
qui, à ma grande surprise, fonctionnait exactement comme str (e) - c'est donc ce que j'utilise.
Je ne sais pas si 'str (e) / unicode (e)' est la 'méthode Python approuvée', et je découvrirai probablement pourquoi ce n'est pas bon quand j'arrive à 3.0, mais on espère que la capacité de gérer un exception inattendue (*) sans mourir et obtenir encore des informations ne disparaîtra jamais ...
(*) Hmm. "exception inattendue" - je pense que je viens de bégayer!