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

回答編集履歴

1

追記

2019/06/23 13:21

投稿

Q71
Q71

スコア995

answer CHANGED
@@ -1,2 +1,47 @@
1
1
  try を while ループに入れる。
2
- 何処を実行していて、次に実行されるのは何処か、考えましょう。tryの中のmugenが実行され、インターラプトが発生し、exceptに入ります。ここにwhileがあって、mugenが呼ばれます。このmugenはtryされていないので(それを抜けたあとなので)、割り込みを処理するものがありません。
2
+ 何処を実行していて、次に実行されるのは何処か、考えましょう。tryの中のmugenが実行され、インターラプトが発生し、exceptに入ります。ここにwhileがあって、mugenが呼ばれます。このmugenはtryされていないので(それを抜けたあとなので)、割り込みを処理するものがありません。
3
+
4
+ ### 追記
5
+ 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)より)。つまり、コンピュータに対する動作の指示書です。あなたは、コンピュータに、どのような指示を出したのでしょうか。指示した内容を理解していますか?それに対して、あなたは、コンピュータに、どのような指示を出したいのでしょうか。
6
+ ```Python
7
+ import time
8
+ import re
9
+ import sys
10
+ from retry import retry
11
+
12
+ # def は「定義」なので、mugen というメソッドを定義する。
13
+ @retry
14
+ def mugen():
15
+ while True:
16
+ time.sleep(1)
17
+ print('loading...')
18
+
19
+ # そしてここが実行される。つぎのブロック内を試してみる。
20
+ # 試してみて、何らかのエラーになると except されないものはエラー報告する。
21
+ try:
22
+ # 定義した mugen を呼び出す。
23
+ mugen()
24
+
25
+ except KeyboardInterrupt:
26
+ # KeyboardInterrupt の場合は通常ルートから除いて以下のブロックを実行する。
27
+ # この種のものは、try-except で除外されない限り、エラー報告される。
28
+ while True:
29
+ x = input('終了しますか?')
30
+ if x == 'yes':
31
+ print('end')
32
+ sys.exit()
33
+ elif x == 'no':
34
+ # try の下の mugen でキーボード割り込みが発生し、ここに来ている。
35
+ # では、この次に実行される mugen でキーボード割り込みが発生したら、どこへ行く?
36
+ mugen()
37
+ else:
38
+ continue
39
+ ```
40
+ 本当にしたいことは、次のようなことではないですか?
41
+ ```擬似コード
42
+ while True:
43
+ try:
44
+ mugen()
45
+ except KeyboardInterrupt:
46
+ 繰り返すか、問い合わせる
47
+ ````