回答編集履歴

1

追記

2019/06/23 13:21

投稿

Q71
Q71

スコア995

test CHANGED
@@ -1,3 +1,93 @@
1
1
  try を while ループに入れる。
2
2
 
3
3
  何処を実行していて、次に実行されるのは何処か、考えましょう。tryの中のmugenが実行され、インターラプトが発生し、exceptに入ります。ここにwhileがあって、mugenが呼ばれます。このmugenはtryされていないので(それを抜けたあとなので)、割り込みを処理するものがありません。
4
+
5
+
6
+
7
+ ### 追記
8
+
9
+ program は、 pro と gram の合成語です。pro は「あらかじめ」、gram は「書かれたもの」です。何をあらかじめ書いてあるのか。「a set of instructions given to a computer to make it perform an operation(コンピュータに何らかの操作をするように与えられる命令の組み合わせ)」です([ロングマン英英辞典](https://www.ldoceonline.com/dictionary/program)より)。つまり、コンピュータに対する動作の指示書です。あなたは、コンピュータに、どのような指示を出したのでしょうか。指示した内容を理解していますか?それに対して、あなたは、コンピュータに、どのような指示を出したいのでしょうか。
10
+
11
+ ```Python
12
+
13
+ import time
14
+
15
+ import re
16
+
17
+ import sys
18
+
19
+ from retry import retry
20
+
21
+
22
+
23
+ # def は「定義」なので、mugen というメソッドを定義する。
24
+
25
+ @retry
26
+
27
+ def mugen():
28
+
29
+ while True:
30
+
31
+ time.sleep(1)
32
+
33
+ print('loading...')
34
+
35
+
36
+
37
+ # そしてここが実行される。つぎのブロック内を試してみる。
38
+
39
+ # 試してみて、何らかのエラーになると except されないものはエラー報告する。
40
+
41
+ try:
42
+
43
+ # 定義した mugen を呼び出す。
44
+
45
+ mugen()
46
+
47
+
48
+
49
+ except KeyboardInterrupt:
50
+
51
+ # KeyboardInterrupt の場合は通常ルートから除いて以下のブロックを実行する。
52
+
53
+ # この種のものは、try-except で除外されない限り、エラー報告される。
54
+
55
+ while True:
56
+
57
+ x = input('終了しますか?')
58
+
59
+ if x == 'yes':
60
+
61
+ print('end')
62
+
63
+ sys.exit()
64
+
65
+ elif x == 'no':
66
+
67
+ # try の下の mugen でキーボード割り込みが発生し、ここに来ている。
68
+
69
+ # では、この次に実行される mugen でキーボード割り込みが発生したら、どこへ行く?
70
+
71
+ mugen()
72
+
73
+ else:
74
+
75
+ continue
76
+
77
+ ```
78
+
79
+ 本当にしたいことは、次のようなことではないですか?
80
+
81
+ ```擬似コード
82
+
83
+ while True:
84
+
85
+ try:
86
+
87
+ mugen()
88
+
89
+ except KeyboardInterrupt:
90
+
91
+ 繰り返すか、問い合わせる
92
+
93
+ ````