回答編集履歴

3

追記

2020/02/01 12:42

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,6 +1,14 @@
1
1
  同じ実行結果になるのは例外を握り潰しているからです。
2
2
 
3
+ 次のような例が適当でしょう。
4
+
5
+
6
+
7
+ 例1
8
+
9
+ ---
10
+
3
- 次のように例外を上位に送出するようなサンプルが適切でしょう
11
+ えば、例外を上位に送出するようなとき
4
12
 
5
13
  ```Python
6
14
 
@@ -50,7 +58,11 @@
50
58
 
51
59
 
52
60
 
61
+ 例2
62
+
63
+ ---
64
+
53
- またfinally節はtry節/except節ないでreturn文が実行された場合も呼び出されます。
65
+ またfinally節はtry節/except節でreturn文が実行された場合も呼び出されます。
54
66
 
55
67
  ```Python
56
68
 
@@ -90,6 +102,32 @@
90
102
 
91
103
 
92
104
 
105
+ finallyの役割
106
+
93
107
  ---
94
108
 
95
109
  例外が起ころうが/起こるまいが無視できない処理をfinally節に書きます。
110
+
111
+ リソースの解放などに相当します。
112
+
113
+ ```Python
114
+
115
+ res = リソースを確保
116
+
117
+ try:
118
+
119
+ 色んな処理
120
+
121
+ except ...:
122
+
123
+ 例外処理
124
+
125
+ finally:
126
+
127
+ resの解放
128
+
129
+ ```
130
+
131
+
132
+
133
+ しかしこのような場合はwith文を使うのがより適切なケースが多いように思います。

2

追記

2020/02/01 12:42

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -25,3 +25,71 @@
25
25
  print('out of block')
26
26
 
27
27
  ```
28
+
29
+
30
+
31
+ **実行結果** [Wandbox](https://wandbox.org/permlink/6Q6C7IV9bh04ccr4)
32
+
33
+ ```
34
+
35
+ try
36
+
37
+ except
38
+
39
+ finally
40
+
41
+ Traceback (most recent call last):
42
+
43
+ File "prog.py", line 3, in <module>
44
+
45
+ 1 / 0
46
+
47
+ ZeroDivisionError: division by zero
48
+
49
+ ```
50
+
51
+
52
+
53
+ またfinally節はtry節/except節ないでreturn文が実行された場合も呼び出されます。
54
+
55
+ ```Python
56
+
57
+ def func():
58
+
59
+ try:
60
+
61
+ return 1
62
+
63
+ finally:
64
+
65
+ print('finally')
66
+
67
+
68
+
69
+ return 2
70
+
71
+
72
+
73
+ ret = func()
74
+
75
+ print(ret)
76
+
77
+ ```
78
+
79
+
80
+
81
+ **実行結果** [Wandbox](https://wandbox.org/permlink/ZY4oIDug1ukIH5OU)
82
+
83
+ ```
84
+
85
+ finally
86
+
87
+ 1
88
+
89
+ ```
90
+
91
+
92
+
93
+ ---
94
+
95
+ 例外が起ころうが/起こるまいが無視できない処理をfinally節に書きます。

1

追記

2020/02/01 12:37

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -6,16 +6,22 @@
6
6
 
7
7
  try:
8
8
 
9
+ print('try')
10
+
9
- ...
11
+ 1 / 0
10
12
 
11
13
  except ZeroDivisionError:
12
14
 
13
- ...
15
+ print('except')
14
16
 
15
17
  raise
16
18
 
17
19
  finally:
18
20
 
19
- ...
21
+ print('finally')
22
+
23
+
24
+
25
+ print('out of block')
20
26
 
21
27
  ```