I need a neat way to print nothing or a number

Chris Angelico rosuav at gmail.com
Tue Mar 26 18:14:32 CET 2013

On Wed, Mar 27, 2013 at 4:06 AM, Wolfgang Maier
<wolfgang.maier at biologie.uni-freiburg.de> wrote:
> Chris Angelico <rosuav <at> gmail.com> writes:
>> Try printing out this expression:
>> "%.2f"%value if value else ''
>> Without the rest of your code I can't tell you how to plug that in,
>> but a ternary expression is a good fit here.
>> ChrisA
> Unfortunately, that's not working, but gives a TypeError: a float is required
> when the first value evaluates to False.
> Apparently it's not that easy to combine number formatting with logical
> operators - the same happens with my idea ('{:.2f}').format(value or '').

Really? Works for me in 3.3:

>>> value=1.2
>>> "%.2f"%value if value else ''
>>> value=0
>>> "%.2f"%value if value else ''
>>> value=None
>>> "%.2f"%value if value else ''

What's the full context? The way I've written the expression, it's
guaranteed to return a string (either "%.2f"5value or the literal '',
and yes, I'm aware that I was inconsistent with the quotes).

I tried it in 2.6 and it worked there, too. Now, if you parenthesize
the bit after the percent sign, the TypeError comes up. But that
wasn't the intention of the code (and "value if value else
something-else" is just "value or something-else", anyway).


More information about the Python-list mailing list