Python の else 節
if 文の else 節
... 前の節の処理がスキップされた時に実行される。
while 文, for 文, try 文の else 節
... 前の節の処理がスキップされなかった時に実行される。
Python の else 節は if 文と、それ以外の while 文, for 文, try 文で、考え方が違います。なので、最初に if 文の else を習った後に while 文, for 文, try 文の else を見ると混乱します。
Effective Python では "項目12 for と while ループの後の else ブロックは使うのを避ける" と書かれていたので、try 文ではわかりませんが、for 文, while 文では、使わない方がいいかなと思います。
節の処理がスキップされた時に実行される。
0. if 文の else 節
if 文の else 節は if 節, elif 節が実行されず、処理がスキップされた時に、実行されます。
全ての式が偽になった場合、 else 節があれば、そのスイートが実行されます。
8.1. if 文 - Python 言語リファレンス
節の処理がスキップされなかった時に実行される。
1. for 文の else 節
for 文の else 節は for 節で break 文が実行されず、処理がスキップされなかった時に、実行されます。
全ての要素を使い切ったとき ...、else 節があればそれが実行され、ループは終了します。 最初のスイート内で break 文が実行されると、 else 節のスイートを実行することなくループを終了します。
8.3. for 文 - Python 言語リファレンス
# list の中身を比較する def equal_list(lst1, lst2): lst1 = lst1.copy() for element in lst2: try: lst1.remove(element) except ValueError: break else: if not lst1: return True return False equal_list([3, 7, 4, 5], [4, 5, 3, 7]) # True
2. while 文の else 節
while 文の else 節は while 節で break 文が実行されず、処理がスキップされなかった時に、実行されます。
else 節がある場合にはそれを実行し、ループを終了します。 最初のスイート内で break 文が実行されると、 else 節のスイートを実行することなくループを終了します。
3. try 文の else 節
try 文の else 節は try 節で例外が起こらず、処理がスキップされなかった時に、実行されます。
オプションの else 節は、実行の制御が try 節の末尾に到達した場合に実行されます。[2]
[2] 現在、制御が "末尾に到達する" のは、例外が発生したり、 return, continue, または break 文が実行される場合を除きます。
8.4. try 文 - Python 言語リファレンス
# list の差分を取る def intersect_list(lst1, lst2): lst = [] lst1 = lst1.copy() for element in lst2: try: lst1.remove(element) except ValueError: pass else: lst.append(element) return lst intersect_list([3, 4, 5, 2], [4, 3, 6]) # [4, 3]
if 文と else 節
if 文は if, elif, else, また、その中で書かれた全ての式の集まり(スイート)をまとめたものを、指しています。
例えば if 文とは、次の箇所を指しています。また、このように複数行に渡って書かれる文を複合文と言います。try, while, for 文も複合文です。
if a = 0: # <- if 文 ... # <- if 文 elif b = 1: # <- if 文 ... # <- if 文 else: # <- if 文 ... # <- if 文
複合文の反対は、単純文です。1行で書かれる文です。break 文, return 文が該当します。
節 とはヘッダと、その配下の文や式の集まり(スイート)をまとめたものを指しています。例えば else 節といえば、次の箇所を指しています。
if a = 0: ... elif b = 1: ... else: # <- else 節 ... # <- else 節
複合文は、一つ以上の '節 (clause)' からなります。節は、ヘッダと 'スイート (suite)' からなります。
8. 複合文 (compound statement)
式とは文の反対です。式は変数に代入できます。文は変数に代入できません。
# 式 sorted([3, 4, 1, 2]) # 代入できる a = sorted([3, 4, 1, 2]) b = sorted([3, 4, 1, 2]) # 文 del a # 代入できない c = del b