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