pzrq adlı kullanıcının gönderisi şunları kullanıyor:
str(e)
Tam da ihtiyacım olan buydu.
(Unicode bir ortamdaysanız, şöyle görünür:
unicode(e)
ve unicode olmayan bir ortamda iyi çalışıyor gibi görünüyor)
Pzrq başka birçok iyi şey söyledi, ama neredeyse tüm iyi şeyler yüzünden cevaplarını kaçırdım. 50 puanım olmadığı için, işe yarayan basit çözüme dikkat çekmek için cevapları hakkında yorum yapamam ve 15 olmadığım için bu cevabı oylayamıyorum, ancak mesaj gönderebiliyorum (geri geliyor, ama oh iyi) - işte burada gönderiyorum - muhtemelen bunun için puan kaybedersiniz ...
Demek istediğim, pzrq'ın cevabına dikkat çekmek olduğundan, lütfen sır almayın ve aşağıdan kaçırmayın. bu yazının ilk birkaç satırı en önemlisidir.
Benim hikayem:
Buraya geldiğim sorun, üzerinde hiçbir kontrole sahip olmadığınız bir sınıftan bir istisna yakalamak istiyorsanız - ne o zaman ??? Kesinlikle tüm olası istisnalar dışında bir mesaj almak için bir girişimde benim kod kullandığı tüm olası sınıfları alt sınıf olmayacak!
Kullanıyordum:
except Exception as e:
print '%s (%s)' % (e.message,type(e))
hepimizin bildiği gibi, OP'nin (beni buraya getirdiğini) sorduğu uyarıyı verir ve bu, pzrq'in bunu yapmanın bir yolu olarak verir:
except Exception as e:
print '%s (%s)' % (str(e),type(e))
olmadı.
Unicode bir ortamda değilim, ama jjc'nin cevabı beni meraklandırdı, bu yüzden denemek zorundaydım. Bu bağlamda bu:
except Exception as e:
print '%s (%s)' % (unicode(e),type(e))
ki, sürpriz olarak, tam olarak str (e) gibi çalıştı - şimdi kullanıyorum.
'Str (e) / unicode (e)' nin 'onaylı Python yolu' olup olmadığını bilmiyorum ve muhtemelen 3.0'a geldiğimde bunun neden iyi olmadığını anlayacağım, ancak bir beklenmedik istisna (*) ölmeden ve hala ondan bazı bilgiler almak hiç gitmeyecek ...
(*) Hmm. "beklenmedik istisna" - Ben sadece kekeledi sanırım!