Skip to content

Pythonの三項演算子での短絡評価が分かりづらい

  • JavaScript
  • TypeScript
  • 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
Next →
  • Motohouse Dev Blog