回答編集履歴

1

追記

2021/06/17 00:31

投稿

quickquip
quickquip

スコア11202

test CHANGED
@@ -25,3 +25,101 @@
25
25
  質問に書いてあるような使い方のケースが一般的で、try文の中にraise文を書き込むケースが少数派でしょう。
26
26
 
27
27
  (そうした方が記述が**すごく**簡潔になるという状況でもなければ、try文の中にraise文を書くことはないと思います)
28
+
29
+
30
+
31
+ ----
32
+
33
+
34
+
35
+ goofyはprintされないはずです。「printされない」という事象を観察して、「この行は実行されていない」と事実を認識します。そこから帰納的に「raiseしたら関数の残りの行は実行されない」という機能の理解をします。
36
+
37
+
38
+
39
+ このコードは**説明のための**コードです。このprintはなんなんだ? と考えるようなコードではありません。
40
+
41
+ テストとしてraise文の機能を理解しているかを問うコード
42
+
43
+ 実行して**printされないことを確認する**ためのコード
44
+
45
+ だと思ってください。
46
+
47
+
48
+
49
+ ----
50
+
51
+
52
+
53
+ 例えば以下のコードを実行してみてください。そして質問のコードとの挙動の違いを考えてください。
54
+
55
+ それでraiseとexceptに**例外の種類を書いた時の機能**を考えてみてください。
56
+
57
+
58
+
59
+ ```python
60
+
61
+ class kusanagi(Exception):
62
+
63
+ pass
64
+
65
+
66
+
67
+ def raise_character(a):
68
+
69
+ print("Saya's")
70
+
71
+ raise RuntimeException
72
+
73
+ print("goofy")
74
+
75
+
76
+
77
+ def func(name: int):
78
+
79
+ try:
80
+
81
+ print(name, "is a")
82
+
83
+ raise_character(name)
84
+
85
+ except kusanagi:
86
+
87
+ print("reliable")
88
+
89
+ raise Exception
90
+
91
+
92
+
93
+ name = "Magatama"
94
+
95
+
96
+
97
+ try:
98
+
99
+ func(name)
100
+
101
+
102
+
103
+ except Exception:
104
+
105
+ print("partner")
106
+
107
+ ```
108
+
109
+
110
+
111
+ ----
112
+
113
+
114
+
115
+ プログラミングの理解には(乱暴に言うと)2つの道筋があります。
116
+
117
+ 一つは、言語仕様を読んでどういう機能を持っているかを理解する
118
+
119
+ 一つは、実際のコード例と実行結果からどういう機能を持っているかを理解する
120
+
121
+ です。
122
+
123
+
124
+
125
+ 質問者さんは前者をさぼって、後者の道に入っていて、にも関わらず後者**も**やらないで「気になります」と言っているだけに見えます。