Equivalent code to the bool() built-in function

Steven D'Aprano steve+comp.lang.python at pearwood.info
Tue Apr 19 04:43:22 EDT 2011


On 2011年4月19日 16:26:50 +1000, Chris Angelico wrote:
> On Tue, Apr 19, 2011 at 4:23 PM, Kushal Kumaran
> <kushal.kumaran+python at gmail.com> wrote:
>>> if a + b + c + d != 1:
>>>    raise ValueError("Exactly one of a, b, c or d must be true.")
>>>>>>>> Unless you're sure all of a, b, c, and d are boolean values, an int
>> with a negative value slipping in could result in the sum equaling 1,
>> but more than one of the variables evaluating to True in boolean
>> contexts.
>> If they're all expressions, then you can easily guarantee that.

*raises eyebrow*
Either of these should do the job:
 sum(map(bool, (a, b, c, d)))
 sum(bool(x) for x in (a, b, c, d))
but I don't see how 
(arbitrary expression) + (another expression) + ... + (last expression)
can have any guarantees applied. I mean, you can't even guarantee that 
they won't raise an exception. Can you explain what you mean?
-- 
Steven


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /