I was wondering if converting to string i.e. str(sth)
can raise an exception like for example float(sth)
does? I am asking this to know if it is necessary to wrap my code in:
try: x = str(value) except ValueError: x = None
to be sure that execution does not stop because of conversion failure.
Also does this differ in Python 2 and 3, since the str
class is different in them??
If you encounter a custom class that explicitly raises an exception in __str__
(or __repr__
if __str__
is not defined). Or, for example a class that returns a bytes
object from __str__
:
class Foo: def __str__(self): return b'' str(Foo()) # TypeError: __str__ returned non-string (type bytes)
But personally, I have never seen this and I'm pretty sure no one has; it would be daft to do it. Likewise, a silly mistake in the implementation of __str__
or edge cases might create another Exception
. It is interesting to see how you could push Python to these edge cases (look at @user2357112 answer here).
Other than that case, no built-ins generally raise an exception in this case since it is defined for all of them in Py2
and Py3
.
For user defined classes str
will use object.__str__
by default if not defined in Python 3 and, in Python 2, use it if a class is a new style class (inherits from object
).
If a class is an old style class I believe it is classobj.__str__
that is used for classes and instance.__str__
for instances.
In general, I would not catch this, special cases aren't special enough for this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With