Pythonの三項演算子での短絡評価が分かりづらい
2022-11-23
Pythonの三項演算子を使った書き方はこんな感じです。
val = 'dog' if True else 'cat'
例えば以下のようなデータがあったとして
person = {"age": 20, "isMarried": True}
三項演算子でこのような書き方をします。
person["unknwon_key"]
if person["age"] >= 20
else person["isMarried"]
結果は当然ageが20以上なので前半の項が評価され
KeyError: 'unknwon_key'
エラーとなります。
(そもそも例があまり適切ではありませんが。)
そこで条件を変えてみると
person["unknwon_key"]
if person["age"] < 20
else person["isMarried"]
今度はエラーになりません。
True
先にエラーとなるunknown_keyでの参照がみえているのにエラーにならないのはちょっと違和感です。
Javascriptだと以下のようになり、そもそも定義していないkeyを参照してもこの場合はエラーにはならないのは置いておいて、unknwonKeyの参照が条件式の後なので直感的な気がします。
person.age < 20
? person.unknownKey
: person.isMarried