基礎・上級問題チェック
問題 12 /40
次のコードを実行したときの処理として、正しいものはどれか。
import requests
url = 'https://www.google.com/'
for count in range(3):
try:
requests.get(url)
print('success')
except Exception:
print('error')
else:
break
else:
print('final')
選択 1
1回目でurlへのリクエストが成功すると、「success」と「final」が表示される。
選択 2
1回目でurlへのリクエストが成功すると、「success」だけ表示される。
選択 3
urlへのリクエストを3回繰り返してすべて失敗すると、「error」が3回表示され、「final」は表示されない。
選択 4
urlへのリクエストが2回目で成功すると、「success」だけ表示される。
解説
選択肢2が正解です。
問題文のコードはリトライ処理の書き方の一例です。
-------------------------------
import requests
# requestsのライブラリを読み込んでいます。
url = 'https://www.google.com/'
# 変数urlにGoogleのURLを代入しています。
for count in range(3):
# 最初のトライを含めて、合計3回トライする場合の書き方です。変数の「count」は「0 1 2」が順番に代入されますが、これは別の場所で使うわけではなく、for文の中の処理を3回繰り返すための役割です。
try:
requests.get(url)
print('success')
# try節の処理が成功すると、後続のexecpt節は実行されません。
except Exception:
print('error')
# try節が失敗すると実行されます。except節の処理が実行されると直下のelse節は実行されず、for文に戻ってtry節に続きます。
else:
break
# try節が成功したときだけ実行され、for文を抜けます。
else:
print('final')
# このelse節はtry文ではなくfor文のelse節です。for文のelse節はif文のelse節と違い、for文のループ処理が終了した後にelse節が実行されます。ただし、for文がbreak文で終了した場合は、else節が実行されません。問題文の場合、try節が成功した場合は実行されません。try節を3回繰り返し、すべて失敗した場合だけ実行されます。
-------------------------------
ポイントはelseとbreakの使い方です。
なお、requestsは外部ライブラリで、基礎試験の範囲外です。
(公式書籍 p.26-27)