Why does Python not have implicit conversions?

concatenation, python

Solution

print "Hello", 1

The reason concatenation doesn't work is that string objects don't have any code in them to perform type conversion as part of their `__add__()` method. As for why, presumably Guido thought it would be a bad idea. The Zen of Python says "explicit is better than implicit."

You could write a string subclass that works this way, however:

class MagicStr(str):
    def __add__(self, other):
        return MagicStr(str(self) + str(other))
    def __radd__(self, other):
        return MagicStr(str(other) + str(self))
    __iadd__ = __add__

Of course, there's no way to get Python to use that class for string literals or for user input, so you end up having to convert strings constantly:

 MagicStr("Hello") + 1

At which point you might as well just write:

 "Hello" + str(1)

Problem

Unlike in C++ or Java, whenever I have something like `print "Hello " + 1`, I get an error that it can't concatenate `str` and `int` objects. Why isn't this conversion done implicitly in Python?

Original source

Related problems