I need a neat way to print nothing or a number

Wolfgang Maier wolfgang.maier at biologie.uni-freiburg.de
Wed Mar 27 09:23:37 CET 2013


Chris Angelico <rosuav <at> gmail.com> writes:

> 
> 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 ''
> '1.20'
> >>> 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).
> 
> ChrisA
> 

Hi Chris,
yes, I had put parens around your ternary operator expression after the %.
Should have read your code more carefully, but I assumed what you tried to do
was to obtain a *formatted* string in both cases. Your suggestion as it is
really just gives formatting for numbers, but returns an empty string for False
values, so it's just a partial solution to the original problem (basically
converting everything to strings ready for an additional round of formatting).
Anyway, there's a better answer by now, so never mind.
Cheers,
Wolfgang





More information about the Python-list mailing list