The documentation is a little bit on the short side, specifying, that numbers are casted to compatible types. Python 1.6 reacts as follows: coerce(3,'a') # raises a TypeError, as expected. coerce('a', 'b') # returns ('a', 'b') coerce('a', []) # raises TypeError Is there any simple rule under what circumstances coerce raises an exception?