Handling 3 operands in an expression without raising an exception
Jussi Piitulainen
jpiitula at ling.helsinki.fi
Thu Sep 26 03:48:10 EDT 2013
Νίκος writes:
> How can i wrote the two following lines so for NOT to throw out
> KeyErrors when a key is missing?
>
> city = gi.time_zone_by_addr( os.environ['HTTP_CF_CONNECTING_IP'] ) or
...
> I was under the impression that the 'or' operator was handling this
> in case one operand was failing but its not the case here.
"f(x) or g(x)" raises an exception if "f(x)" raises an exception, or
if "f(x)" returns a false value and "g(x)" raises an exception.
> Then i thought of os.environ.get() to default to something but then
> again we have 3 operand in the expression.
Adapt this:
>>> {}.get('foo') or {'empty':''}.get('empty') or 'catchall'
'catchall'
Or nest the calls this way if an empty string is a valid value:
>>> {}.get('foo', {'empty':''}.get('empty', 'catchall'))
''
This will compute the default values even when they are not used.
More information about the Python-list
mailing list