In theory yes, it can, but in practice it almost certainly won't. The way that the str function works is it calls the __str__ function of the object that it's converting to a string. Built in types like List, numeric types, and others will return values about what you would expect, [x,y,z] for a List, the number as a string for a numerical type, etc. object has a __str__ method that gives an output like at 0x7fdb2fa6a640>, which often isn't very useful but won't raise an exception.
So, calling str on any builtin is almost certainly not going to raise an exception (Admittedly, I can't find a guarantee for this in the Python documentation, but I can't imagine a situation where it would happen)
That said, it is possible to override the __str__ method for a custom class. If this is done, then that method could raise an exception just like any other function that a programmer could write could - an intentional exception, an uncaught IndexError or the like, etc. Even if you're not overriding __str__, if you're using a module that does, it's entirely possible the author of that module made some mistake on some rare edge that will raise an exception.
The bottom line: It shouldn't if everyone's done their job right, but it could. In almost any practical situation I wouldn't bother try/catching.