`unicode(e)` is recommended. But In Python 2 there is an edge case with exceptions and unicode.
Normal Case:
---
```
try:
    raise SyncException(u"வணக்கம்")#TamilUnicode
except SyncException, e:
    print unicode(e)
```
`வணக்கம்`

Edge case:
---
`raise SyncException(u"வணக்கம")`

```
SyncException                             Traceback (most recent call last)
<ipython-input-26-097ae5484d8d> in <module>()
----> 1 raise SyncException(u"வணக்கம")

<type 'str'>: (<type 'exceptions.UnicodeEncodeError'>, UnicodeEncodeError('ascii', u'\u0bb5\u0ba3\u0b95\u0bcd\u0b95\u0bae', 0, 6, 'ordinal not in range(128)'))
```
If the exception is handled in try block, unicode works else we have an issue. This is only problem in python 2 and not python 3. 

Hope this is ok.