Допис pzrq говорить про використання:
str(e)
Це саме те, що мені було потрібно.
(Якщо ви перебуваєте в середовищі unicode, виявляється, що:
unicode(e)
буде працювати, і, здається, він буде добре працювати в не-кодовому середовищі)
Pzrq сказав багато інших добрих речей, але я майже не пропустив їх відповідь через усі хороші речі. Оскільки у мене немає 50 балів, я не можу коментувати їх відповідь, щоб спробувати звернути увагу на просте рішення, яке працює, і оскільки у мене немає 15, я не можу проголосувати за цю відповідь, але можу розмістити повідомлення (відчуває себе відсталим, але ну добре) - так ось я розміщую повідомлення - ймовірно, втрачаю за це бали ...
Оскільки моя думка полягає в тому, щоб звернути увагу на відповідь pzrq, будь ласка, не затуляйте погляд і не пропустіть його у всьому нижче. перші кілька рядків цієї публікації є найважливішими.
Моя історія:
Проблема, до якої я прийшов сюди, полягав у тому, що якщо ви хочете зловити виняток із класу, над яким ви не маєте контролю - що тоді ??? Я, звичайно, не збираюся підкласирувати всі можливі класи, які мій код використовує, намагаючись отримати повідомлення з усіх можливих винятків!
Я використовував:
except Exception as e:
print '%s (%s)' % (e.message,type(e))
яка, як ми всі зараз знаємо, дає попередження, про яке запитували ОП (що мене тут привело), і це, що pzrq дає як спосіб це зробити:
except Exception as e:
print '%s (%s)' % (str(e),type(e))
не.
Я не в середовищі unicode, але відповідь jjc змусила мене замислитися, тому мені довелося спробувати. У цьому контексті це стає:
except Exception as e:
print '%s (%s)' % (unicode(e),type(e))
який, на мій подив, працював так само, як str (e) - тож ось що я використовую.
Не знаю, чи "str (e) / unicode (e)" є "схваленим способом Python", і я, мабуть, дізнаюся, чому це не добре, коли я перейду до 3.0, але можна сподіватися, що здатність обробляти несподіваний виняток (*), не вмираючи, і все-таки отримати інформацію від нього ніколи не піде ...
(*) Гм. "несподіваний виняток" - я думаю, що я просто заїкався!