注意: - 我在参考堆栈溢出中的一些示例后编写了我的代码,但仍然无法获得所需的输出
我有一个python脚本,其中循环使用Instagram API进行迭代。我将user_id作为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版。主要问题是如果循环运行并且特定调用被阻止并且出现此错误,如何避免它并继续运行下一次迭代?此外,如果帐户是私人帐户,我想附加&#34;私人帐户&#34;列表。
答案 0 :(得分:1)
看起来实际获取URL的代码在您的自定义类型中 - &#34; Myopen&#34; (未显示)。看起来它不会抛出你期望的HTTPError,因为你的&#34; json.load&#34;行仍在执行(并导致 被抛出的ValueError)。
如果您希望触发错误处理块,则需要检查响应状态代码以查看Myopen中是否有!= 200并抛出您期望的HTTPError而不是现在正在执行的操作。
我并不熟悉getcode
,但看起来它支持url = myopener.open('yoururl')
if url.getcode() == 400:
data1.append('Private Account')
data2.append('Private Account')
data3.append('Private Account')
continue
方法。也许尝试类似这样的东西而不是期待HTTPError:
CREATE TABLE #TableName (Code int, percentage int, nCollects int, nDels int, [day] varchar(3))
INSERT INTO #TableName (Code, percentage, nCollects, nDels, [day])
VALUES
('101','100','4','4','SUN')
,('102','100','4','4','SUN')
,('104','100','6','6','MON')
,('101','50','4','8','TUE')
,('102','50','4','8','TUE')
,('104','100','2','2','TUE')
,('105','50','1','2','TUE')
,('106','100','2','2','TUE')
,('106','50','2','4','WED')