lispとrubyとpythonと その5 例外処理(python)

pytohnも普通。

#例外処理
def test1():
    try:
        #raise
        #例外を発生させる
        raise NameError("error!")
    #例外が発生したときの処理
    except:
        print("例外発生")
    #例外が発生しなかったときの処理
    else:
        print("例外発生せず")
    #例外発生してもしなくてもやる処理
    finally:
        print("後始末")

test1()
#->例外発生
# >後始末

#特定の例外を補足
def test2():
    try:
        raise NameError("error!")

    except (NameError):
        print("NameError発生")
    #例外が発生しなかったときの処理

test2()
#->NameError発生

#特定の例外を変数に入れる
def test3():
    try:
        raise NameError("error!")

    #asで変数指定
    except NameError as ne:
        print(str(ne))
        print("NameError発生")
    #例外が発生しなかったときの処理

test3()
#->error!
#  NameError発生

#独自例外の定義
class MyError(Exception):
    def __init__(self, value):
        self.value = value
        def __str__(self):
            return repr(self.value)

try:
    raise MyError("my error")
except (MyError):
    print("MyError発生")

#->MyError発生