"Decoding unicode is not supported" in unusual situation

Steven D'Aprano steve+comp.lang.python at pearwood.info
Wed Mar 7 12:42:53 CET 2012

On Wed, 07 Mar 2012 22:18:50 +1100, Ben Finney wrote:

> deets at web.de (Diez B. Roggisch) writes:
>> John Nagle <nagle at animats.com> writes:
>> > I think that somewhere in "suds", they subclass the "unicode" type.
>> > That's almost too cute.
>> >
>> > The proper test is
>> >
>> > 	isinstance(s,unicode)
>> Woot, you finally discovered polymorphism - congratulations!
> If by “discovered” you mean “broke”.
> John, polymorphism entails that it *doesn't matter* whether the object
> inherits from any particular type; it only matters whether the object
> behaves correctly.
> So rather than testing whether the object inherits from ‘unicode’, test
> whether it behaves how you expect – preferably by just using it as
> though it does behave that way.

I must admit that I can't quite understand John Nagle's original post, so 
I could be wrong, but I *think* that both you and Diez have misunderstood 
the nature of John's complaint.

I *think* he is complaining that some other library -- suds? -- has a 
broken test for Unicode, by using:

if type(s) is unicode: ...

instead of

if isinstance(s, unicode): ...

Consequently, when the library passes a unicode *subclass* to the 
tounicode function, the "type() is unicode" test fails. That's a bad bug.

It's arguable that the library shouldn't even use isinstance, but that's 
an argument for another day.


More information about the Python-list mailing list