Il post di pzrq dice di usare:
str(e)
Questo era esattamente ciò di cui avevo bisogno.
(Se ti trovi in un ambiente Unicode, sembra che:
unicode(e)
funzionerà e sembra funzionare bene in un ambiente non Unicode)
Pzrq ha detto molte altre cose buone, ma ho quasi perso la loro risposta a causa di tutte le cose buone. Dato che non ho 50 punti, non posso commentare la loro risposta per tentare di attirare l'attenzione sulla semplice soluzione che funziona, e poiché non ne ho 15 non posso votare quella risposta, ma posso postare (mi sento indietro, ma vabbè) - quindi eccomi qui - probabilmente perdo punti per quello ...
Dal momento che il mio punto è quello di attirare l'attenzione sulla risposta di PZRQ, per favore, non smalto e non perdere in tutto il seguito. le prime righe di questo post sono le più importanti.
La mia storia:
Il problema per cui sono venuto qui è se vuoi prendere un'eccezione da una classe su cui non hai alcun controllo - e allora ??? Sicuramente non ho intenzione di sottoclassare tutte le possibili classi utilizzate dal mio codice nel tentativo di riuscire a ottenere un messaggio da tutte le possibili eccezioni!
Stavo usando:
except Exception as e:
print '%s (%s)' % (e.message,type(e))
che, come ormai tutti sappiamo, dà l'avvertimento richiesto dall'OP (che mi ha portato qui), e questo, che pzrq offre come un modo per farlo:
except Exception as e:
print '%s (%s)' % (str(e),type(e))
no.
Non sono in un ambiente Unicode, ma la risposta di JJC mi ha fatto meravigliare, quindi ho dovuto provarlo. In questo contesto questo diventa:
except Exception as e:
print '%s (%s)' % (unicode(e),type(e))
che, con mia sorpresa, ha funzionato esattamente come str (e) - quindi ora è quello che sto usando.
Non so se 'str (e) / unicode (e)' sia la 'via Python approvata', e probabilmente scoprirò perché non va bene quando arrivo a 3.0, ma si spera che la capacità di gestire un eccezione imprevista (*) senza morire e ancora ottenere alcune informazioni da esso non andrà mai via ...
(*) Hmm. "eccezione inaspettata" - Penso di aver appena balbettato!