[Python] try else文、while else文、for else文

こんにちは、@yasuです。

今回は、else文について学習したいと思います。

elseと言えば、ifですが、、、

pythonには、try else文、while else文、for else文があります。(私が知っている限り^^)

結構便利かも^^

環境

https://repl.it/ で確認しました。Visual Studio Codeでも可能です。

try文で例外が発生しなければ、finallyの前にelseを実行します。

コード

def test_try(flag):
    print("try...except...else...finally文")
    try:
        if flag:
             raise Exception
    except:
        print("■except")
    else:
        print("■else")
    finally:
        print("■finally")
    print("■end\n")

test_try(False)
test_try(True)

実行結果

image.png

whileの条件で抜け出した場合、elseを実行します。途中breakで抜け出した場合は、elseを実行しません。

def test_while(flag):
    print("while...else文")
    while flag:
        if flag:
            print("breakでwhileを抜ける")
            break
        flag = True
    else:
        print("■else")
    print("■end\n")

test_while(False)
test_while(True)

実行結果

image.png

forの条件で抜け出した場合、elseを実行します。途中breakで抜け出した場合は、elseを実行しません。

def test_for(flag):
    print("for...in...else文")
    for i in range(1):
        if flag:
            print("breakでforを抜ける")
            break
    else:
        print("■else")
    print("■end\n")

test_for(False)
test_for(True)

実行結果

image.png

応用編、2重ループを一気に抜け出すには、以下のようにします。
内側のループでelse continue文を記述して、外側のループでbreakします。

def test_for_for(flag):
    print("2重のfor...in...else文")
    for i in range(3):
        for j in range(3):
            print(f"i+{i},j+{j}")
            if flag:
                print("breakでforを抜ける")
                break
        else:
            print("■else j")
            continue
        print("breakで2重forを抜ける")
        break
    else:
        print("■else i")
    print("■end\n")

test_for_for(False)
test_for_for(True)

動作結果

image.png

Sort:  

@yasu transfered 0.5 KRWP to @krwp.burn. voting percent : 7.17%, voting power : 62.91%, steem power : 1935960.59, STU KRW : 1200.
@yasu staking status : 250 KRWP
@yasu limit for KRWP voting service : 0.5 KRWP (rate : 0.002)
What you sent : 0.5 KRWP [47617087 - fb70a1c807fb2acd0443fa763f60f6c64614ac39]

Coin Marketplace

STEEM 0.13
TRX 0.35
JST 0.033
BTC 125179.41
ETH 4677.79
SBD 0.79