[Python-Dev] How long the wrong type of argument should we limit (or not) in the error message (C-api)?

Steven D'Aprano steve at pearwood.info
Sun Dec 15 04:51:29 CET 2013

On Sun, Dec 15, 2013 at 11:25:10AM +1000, Nick Coghlan wrote:

> Oh, yes, a %T shortcut for "length limited type name of the supplied
> object" would be brilliant. We need this frequently for C level error
> messages, and I almost always have to look at an existing example to
> remember the exact incantation :)

What are the chances that could be made available from pure Python too? 
Having to extract the name of the type is a very common need for error 
messages, and I never know whether I ought to write type(obj).__name__ 
or obj.__class__.__name__. A %T and/or {:T} format code could be the One 
Obvious Way to include the type name in strings:

    raise TypeError("Expected int but got '{:T}'".format(obj))

looks nicer to me than either of:

    raise TypeError("Expected int but got '{}'".format(type(obj).__name__))
    raise TypeError("Expected int but got '{}'".format(obj.__class__.__name__))


More information about the Python-Dev mailing list