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 -- http://mail.python.org/mailman/listinfo/python-list