teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

例外処理 追加

2017/07/10 06:33

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -51,4 +51,65 @@
51
51
 
52
52
  これが 3回目のときにbreak に相当するものでループを抜けるとか。
53
53
 
54
- そうすれば 配列の型に関係なくできると思います。
54
+ そうすれば 配列の型に関係なくできると思います。
55
+
56
+ ----------
57
+
58
+ 他の方から「上記の方法はレガシーコードだ」と指摘を受けました。
59
+
60
+ その方からは「例外処理」を提示されました。
61
+ 確かに例外処理もあります。
62
+
63
+ なので、
64
+
65
+ メソッドA の内部で処理するときに 指定の処理が失敗したら例外を投げる。
66
+ メソッドB でも同様。
67
+ メソッドC も...
68
+
69
+ という風にしておきます。
70
+
71
+ Pythonはよくわからないので調べてみると、
72
+ throw ではなく raise らしいですね。
73
+
74
+ なので、
75
+
76
+ ```Python
77
+ def methodA():
78
+ # なんらかの処理
79
+ # ここで処理失敗したとする
80
+ raise Exception( "methodA失敗" )
81
+
82
+ def methodB():
83
+ # なんらかの処理
84
+ # ここで処理失敗したとする
85
+ raise Exception( "methodB失敗" )
86
+
87
+ def methodC():
88
+ # なんらかの処理
89
+ # ここで処理失敗したとする
90
+ raise Exception( "methodC失敗" )
91
+
92
+ ```
93
+
94
+ としておけば、
95
+
96
+ ```Python
97
+ def methodX():
98
+ try:
99
+ methodA()
100
+ methodB()
101
+ methodC()
102
+ except Exception, e:
103
+ print e.value
104
+ ```
105
+
106
+ みたいにできます。
107
+
108
+ で、もしmethodAで失敗すれば 例外が投げられるので methodB以降は処理しない状態です。
109
+
110
+ なので、用件にあっているかと。
111
+
112
+ [例外を投げる](http://d.hatena.ne.jp/veryberry_cafe/20061005/1160599052)
113
+
114
+
115
+