例外処理

# 二つの整数値を読み込んで乗算と除算を行う

a = int(input('整数a:'))
b = int(input('整数b:'))

print(f'a * b は {a * b} です。')
print(f'a / b は {a / b} です。')

C:>python xxx.py
整数a:5
整数b:3
a * b は 15 です。
a / b は 1.6666666666666667 です。

# 乗算と除算を行うプログラム(例外処理:その1)

try:
    a = int(input('整数a:'))
    b = int(input('整数b:'))

    print(f'a * b は {a * b} です。')
    print(f'a / b は {a / b} です。')

except ValueError:
    print('整数と認識できません!')

except ZeroDivisionError:
    print('ゼロによる除算!')

else:
    print('正常終了!')

finally:
    print('お疲れさまでした。')

C:>python xxx.py
整数a:8
整数b:6
a * b は 48 です。
a / b は 1.3333333333333333 です。
正常終了!
お疲れさまでした。

# 乗算と除算を行うプログラム(例外処理:try-finally文)

try:
    a = int(input('整数a:'))
    b = int(input('整数b:'))

    print(f'a * b は {a * b} です。')
    print(f'a / b は {a / b} です。')

    print('正常終了!')

finally:
    print('お疲れさまでした。')

C:>python xxx.py
整数a:4
整数b:5
a * b は 20 です。
a / b は 0.8 です。
正常終了!
お疲れさまでした。

# 乗算と除算を行うプログラム(例外処理:その2)

try:
    a = int(input('整数a:'))
    b = int(input('整数b:'))

    print(f'a * b は {a * b} です。')
    print(f'a / b は {a / b} です。')

except (ValueError, ZeroDivisionError):
    print('認識不能orゼロ除算!')

else:
    print('正常終了!')

finally:
    print('お疲れさまでした。')

C:>python xxx.py
整数a:9
整数b:5
a * b は 45 です。
a / b は 1.8 です。
正常終了!
お疲れさまでした。

# 乗算と除算を行うプログラム(例外処理:その3)

try:
    a = int(input('整数a:'))
    b = int(input('整数b:'))

    print('a * b は', a * b, 'です。')
    print('a / b は', a / b, 'です。')

except (ValueError, ZeroDivisionError) as e:
    print(type(e))
    print('認識不能orゼロ除算!')

else:
    print('正常終了!')

finally:
    print('お疲れさまでした。')

C:>python xxx.py
整数a:1
整数b:5
a * b は 5 です。
a / b は 0.2 です。
正常終了!
お疲れさまでした。

# 乗算と除算を行うプログラム(例外処理:その4)

try:
    a = int(input('整数a:'))
    b = int(input('整数b:'))

    print('a * b は', a * b, 'です。')
    print('a / b は', a / b, 'です。')

except ValueError:
    print('整数と認識できません!')

except ZeroDivisionError:
    print('ゼロによる除算!')

except:
    print('例外発生!')

else:
    print('正常終了!')

finally:
    print('お疲れさまでした。')

C:>python xxx.py
整数a:3
整数b:5
a * b は 15 です。
a / b は 0.6 です。
正常終了!
お疲れさまでした。

# raise文による例外の送出

def func(sw: int) -> None:
    match sw:
        case 0: raise ValueError
        case 1: raise ZeroDivisionError

sw = int(input('sw:'))

try:
    func(sw)

except BaseException as e:
    print('例外捕捉!')
    print(type(e))

C:>python xxx.py
sw:5

# ユーザ定義の例外を送出

class MyException(Exception):
    """マイ例外"""
    pass

def raise_my_exception() -> None:
    raise MyException

def func(sw: int) -> None:
    try:
        if sw == 0:
            raise_my_exception()
    except MyException as e:
        print('マイ例外を捕捉。')
        # マイ例外に対する対処を試みる。
        # 回復不可能と判断。
        print('回復できませんでした。')
        raise Exception

sw = int(input('sw:'))

try:
    func(sw)
except Exception as e:
    print('例外捕捉!')
    print(type(e))

C:>python xxx.py
sw:6

# ユーザ定義の例外を送出([3]をraiseに変更)

class MyException(Exception):
    """マイ例外"""
    pass

def raise_my_exception() -> None:
    raise MyException

def func(sw: int) -> None:
    try:
        if sw == 0:
            raise_my_exception()
    except MyException as e:
        print('マイ例外を捕捉。')
        # マイ例外に対する対処を試みる。
        # 回復不可能と判断。
        print('回復できませんでした。')
        raise

sw = int(input('sw:'))

try:
    func(sw)
except Exception as e:
    print('例外捕捉!')
    print(type(e))

C:>python xxx.py
sw:3

# ユーザ定義の例外を送出([3]を削除)

class MyException(Exception):
    """マイ例外"""
    pass

def raise_my_exception() -> None:
    raise MyException

def func(sw: int) -> None:
    try:
        if sw == 0:
            raise_my_exception()
    except MyException as e:
        print('マイ例外を捕捉。')
        # マイ例外に対する対処を試みる。
        # 回復不可能と判断。
        print('回復できませんでした。')
        # 何も行わない

sw = int(input('sw:'))

try:
    func(sw)
except Exception as e:
    print('例外捕捉!')
    print(type(e))

C:>python xxx.py
sw:3

# ユーザ定義の例外を送出(トレースバックを表示)

import traceback

class MyException(Exception):
    """マイ例外"""
    pass

def raise_my_exception() -> None:
    raise MyException

def func(sw: int) -> None:
    try:
        if sw == 0:
            raise_my_exception()
    except MyException as e:
        print('マイ例外を捕捉。')
        # マイ例外に対する対処を試みる。
        # 回復不可能と判断。
        print('回復できませんでした。')
        raise Exception

sw = int(input('sw:'))

try:
    func(sw)
except Exception as e:
    print('例外捕捉!')
    print(traceback.format_exc())  # トレースバックを表示
    print(type(e))

C:>python xxx.py
sw:4

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。