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

回答編集履歴

4

行の重複を修正

2020/11/06 13:42

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -48,9 +48,6 @@
48
48
  print(f"Unknown Error:{response.status_code}")
49
49
  time.sleep(5)
50
50
  continue
51
- else:
52
- raise APIError(response)
53
-
54
51
  # リクエスト制限以外で5回連続でエラーが起きた場合は本当に例外を発生させる。
55
52
  else:
56
53
  raise APIError(response)

3

status_code

2020/11/06 13:42

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -39,10 +39,18 @@
39
39
 
40
40
  if response.ok:
41
41
  return response
42
+ if response.status_code == 429:
43
+ # リクエスト制限が発生したときは100+1秒待つ
44
+ print("request limit. wait 100 secs")
45
+ time.sleep(101)
42
46
  else:
47
+ # その他のエラーの場合は5秒待ってリトライ
43
- print("Request limit. Wait 100 seconds")
48
+ print(f"Unknown Error:{response.status_code}")
44
- time.sleep(101) # 内部時計の狂いを考慮して念のため+1秒余計に待つ
49
+ time.sleep(5)
45
- continue
50
+ continue
51
+ else:
52
+ raise APIError(response)
53
+
46
54
  # リクエスト制限以外で5回連続でエラーが起きた場合は本当に例外を発生させる。
47
55
  else:
48
56
  raise APIError(response)

2

typo

2020/11/06 13:36

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  「例外処理する場所を一か所にしたい」とは、かみ砕くと、gspreadを操作するとき回数制限で発生する例外処理を関数毎に書きたくない、ことだと理解しました。
12
12
 
13
- この目的を達するために、やや強引ですが、[gspreadのソース](https://github.com/burnash/gspread/blob/master/gspread/client.py#L25)を参考に、すべてのAPIリクエストの元締めである**gspreadライブラリのclientオブジェクトのreuest関数を書き換えてみました**。
13
+ この目的を達するために、やや強引ですが、[gspreadのソース](https://github.com/burnash/gspread/blob/master/gspread/client.py#L25)を参考に、すべてのAPIリクエストの元締めである**gspreadライブラリのclientオブジェクトのrequest関数を書き換えてみました**。
14
14
 
15
15
  下記はクラスを使わず平文でシート操作する場合となっています。
16
16
  質問者さんの元のSpreadSheetクラスへの組み込みとかは御自分で考えてみてください。

1

comments

2020/11/06 13:28

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -47,6 +47,7 @@
47
47
  else:
48
48
  raise APIError(response)
49
49
 
50
+ # 関数を書き換える。
50
51
  gspread.Client.request = custom_request
51
52
 
52
53