Danny Yoo <d...@hashcollision.org> writes: > Hi Albert, > > Just following up: I consider the 2 (or 3) arg form of unicode() to be > a design flaw in the Standard Library. It's redundant because the > bytes type already has a decode() method: > > https://docs.python.org/3/library/stdtypes.html#bytes.decode > > > So I would personally write convert() like this: > > ###################################### > def convert(data): > if isinstance(data, float): > return unicode(data) > if isinstance(data, bytes): > return data.decode("utf-8") > raise ValueError("Unexpected data", data) > ######################################
Since the type of ‘data’ is the only thing which determines whether an error is raised, the error message might be improved by stating the type:: def convert(data): if isinstance(data, float): return unicode(data) if isinstance(data, bytes): return data.decode("utf-8") raise ValueError( "Unexpected type {type} for data {data!r}".format( type=type(data), data=data)) which makes the errors more self-explanatory, IMO:: >>> convert(17.3) '17.3' >>> convert(b'\x53\x70\x61\x6d') 'Spam' >>> convert(12) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 9, in convert ValueError: Unexpected type <class 'int'> for data 12 >>> convert('Spam') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 9, in convert ValueError: Unexpected type <class 'str'> for data 'Spam' -- \ “Anyone who puts a small gloss on [a] fundamental technology, | `\ calls it proprietary, and then tries to keep others from | _o__) building on it, is a thief.” —Tim O'Reilly, 2000-01-25 | Ben Finney _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor