簡體   English   中英

如何在調用API時避免或跳過python中的錯誤400

[英]How to avoid or skip error 400 in python while calling the API

注意:-我在引用堆棧溢出中的幾個示例后編寫了代碼,但仍然無法獲得所需的輸出

我有一個Python腳本,其中循環使用Instagram API進行迭代。 我提供了user_id作為API的輸入,該API獲得了帖子的數量,關注者的數量和關注者的數量。 每次收到響應時,我都將其加載到JSON模式中,並追加到列表data1,data2和data3。

問題是:=有些帳戶是私人帳戶,不允許對其進行API調用。 當我在IDLE Python Shell中運行腳本時,它給出了錯誤

Traceback (most recent call last):
  File "<pyshell#144>", line 18, in <module>
beta=json.load(url)
File "C:\Users\rnair\AppData\Local\Programs\Python\Python35\lib\site-  packages\simplejson-3.8.2-py3.5-win-amd64.egg\simplejson\__init__.py", line 455,  in load
 return loads(fp.read(),
File "C:\Users\rnair\AppData\Local\Programs\Python\Python35\lib\tempfile.py", line 483, in func_wrapper
return func(*args, **kwargs)
**ValueError: read of closed file**

但是JSON包含以下內容:

{
  "meta":  {
  "error_type": "APINotAllowedError",
  "code": 400,
  "error_message": "you cannot view this resource"
 }
}

我的代碼是:-

for r in range(307,601):
 var=r,sheet.cell(row=r,column=2).value
 xy=var[1]
 ij=str(xy)
 if xy=="Account Deleted":
    data1.append('null')
    data2.append('null')
    data3.append('null')
    continue
myopener=Myopen()
try:           
    url=myopener.open('https://api.instagram.com/v1/users/'+ij+'/?access_token=641567093.1fb234f.a0ffbe574e844e1c818145097050cf33')
except urllib.error.HTTPError as e:  // I want the change here
    data1.append('Private Account')
    data2.append('Private Account')
    data3.append('Private Account')
    continue
beta=json.load(url)
item=beta['data']['counts']
data1.append(item['media'])
data2.append(item['followed_by'])
data3.append(item['follows'])

我正在使用Python版本3.5.2。 主要問題是, 如果循環運行並且特定的調用被阻止並收到此錯誤,如何避免它並繼續運行下一個迭代? 另外,如果該帳戶是私人帳戶,我想將“私人帳戶”附加到列表中。

看起來實際上是在獲取URL的代碼在您的自定義類型-“ Myopen”(未顯示)中。 它也像仍在執行其不扔你期待的HTTPError,因為你的“json.load”行(並導致被拋出ValueError異常)。

如果要觸發錯誤處理塊,則需要檢查響應狀態代碼以查看Myopen中的!= 200,並拋出您期望的HTTPError而不是現在執行的任何操作。


我個人不熟悉FancyURLOpener ,但看起來它支持getcode方法。 也許嘗試這樣的事情,而不是期望HTTPError:

url = myopener.open('yoururl')
if url.getcode() == 400:
  data1.append('Private Account')
  data2.append('Private Account')
  data3.append('Private Account')
  continue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM