Post pzrq mówi, aby użyć:
str(e)
To było dokładnie to, czego potrzebowałem.
(Jeśli pracujesz w środowisku Unicode, wygląda na to, że:
unicode(e)
będzie działać i wygląda na to, że działa dobrze w środowisku innym niż Unicode)
Pzrq powiedział wiele innych dobrych rzeczy, ale prawie przegapiłem ich odpowiedź z powodu wszystkich dobrych rzeczy. Ponieważ nie mam 50 punktów, nie mogę komentować ich odpowiedzi, aby spróbować zwrócić uwagę na proste rozwiązanie, które działa, a ponieważ nie mam 15, nie mogę zagłosować na tę odpowiedź, ale mogę publikować (wydaje się być zacofany, ale no cóż) - tak oto piszę - pewnie stracę za to punkty ...
Ponieważ moim celem jest zwrócenie uwagi na odpowiedź pzrq, nie glazuruj i nie przegap tego we wszystkich poniższych. kilka pierwszych linijek tego posta jest najważniejszych.
Moja historia:
Problem, dla którego tu przyszedłem, polegał na tym, że jeśli chcesz złapać wyjątek z zajęć, nad którymi nie masz kontroli - co wtedy ??? Z pewnością nie zamierzam tworzyć podklas wszystkich możliwych klas, których używa mój kod, aby móc uzyskać komunikat ze wszystkich możliwych wyjątków!
Używałem:
except Exception as e:
print '%s (%s)' % (e.message,type(e))
który, jak wszyscy teraz wiemy, daje ostrzeżenie OP, o które pytano (które mnie tu przywiodło), a to, co podaje pzrq jako sposób na zrobienie tego:
except Exception as e:
print '%s (%s)' % (str(e),type(e))
nie.
Nie jestem w środowisku Unicode, ale odpowiedź jjc sprawiła, że zacząłem się zastanawiać, więc musiałem spróbować. W tym kontekście staje się to:
except Exception as e:
print '%s (%s)' % (unicode(e),type(e))
który, ku mojemu zaskoczeniu, działał dokładnie tak, jak str (e) - więc teraz tego używam.
Nie wiem, czy „str (e) / unicode (e)” jest „zatwierdzoną metodą Pythona” i prawdopodobnie dowiem się, dlaczego to nie jest dobre, kiedy dojdę do 3.0, ale można mieć nadzieję, że umiejętność obsługi nieoczekiwany wyjątek (*) bez umierania, a mimo to otrzymanie z niego pewnych informacji nigdy nie zniknie ...
(*) Hmm. „nieoczekiwany wyjątek” - wydaje mi się, że się jąkałem!