Object Relational Mappers are evil (a meditation)

Terry Reedy tjreedy at udel.edu
Wed Dec 23 20:11:25 EST 2009


>> Instead the accepted, idiomatic Python way of writing this was to use
>> short-circuit booleans:
>>
>> result = condition and x or y
>>
>> However this idiom is buggy! If x is a false-value (say, 0) then result
>> gets set to y no matter what the value of condition.

This is only a bug if one expects otherwise.

>> This buggy idiom survived many years of Python development, missed by
>> virtually everyone.

The last statement is false. The hazard of using and/or was well-known 
back in '97 or so when I discovered or learned it and I believe it was 
mentioned in the FAQ entry on the subject. The new alternative has the 
hazard that the condition and if-branch must be written and read in a 
backwards order. I consider that buggy and do not use it for that reason.

Terry Jan Reedy




More information about the Python-list mailing list