LoginSignup
0
2

More than 3 years have passed since last update.

関数内で例外が発生した場合、呼び出し元へ伝わる2

Posted at
1
def test_exception(num):
    print(1)
    try:
        print(2)
        answer = 100 / num
        return answer
        print(3)
    except ZeroDivisionError as e:
        print(4)
        raise e
    print(5)

print('start')
try:
    test_exception(1)
    print(6)
except ZeroDivisionError as e:
    print(7)
    raise e
finally:
    print('end')
1の実行結果
start
1
2
6
end

print('start')を
最初に実行。

次に、
tryブロックを実行する。
tryブロック1行目のtest_exception関数に引数1で入る。
なので、
print(1)を実行し、
test_exception関数内のtryブロック内を実行する。
print(2)を実行し、
answer = 100
となり100を返す。
retrunしているので、
その下のprint(3)は実行されない点に注意。
ZeroDivisionErrorは発生していないので、
test_exception関数内のexceptブロックは実行せず、とばす。

tryブロックのtest_exception関数が終わったので、
その続きでprint(6)を実行。

ZeroDivisionErrorは発生していないので、
exceptブロックは実行せず、とばす。

最後にfinallyブロックを実行する。

test_exception関数の引数を0にすると、

2
def test_exception(num):
    print(1)
    try:
        print(2)
        answer = 100 / num
        return answer
        print(3)
    except ZeroDivisionError as e:
        print(4)
        raise e
    print(5)

print('start')
try:
    test_exception(0)
    print(6)
except ZeroDivisionError as e:
    print(7)
    raise e
finally:
    print('end')
2の実行結果
start
1
2
4
7
end
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2