如果api调用失败,重新运行执行 - [Python2.7]

时间:2017-04-11 23:02:00

标签: python python-2.7 api networking

我正在运行一个从API网址中获取json数据的代码,方案是我正在尝试自定义异常,而未获取URL响应(有时响应显示200仍然不会提取数据)代码应该从头开始重新执行。

代码:

import json
import urllib
url = 'www.google.com'
status = url.getcode()
if(status != 200):
   # re-execute the code
data = json.load(urllib.urlopen(url))
if (data == null):
   #re-execute the code

在通过互联网搜索时找不到合适的解决方案

任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

我认为这可以帮助你,遵循你迄今为止的逻辑:

import json
import urllib

url = 'www.google.com'

while True:
    status = url.getcode()
    if status != 200:
        continue
    data = json.load(urllib.urlopen(url))
    if not data:
        continue
    break

您还可以通过以下方式进行改进:

import json
import urllib

url = 'www.google.com'
status = url.getcode()
data = json.load(urllib.urlopen(url))

while status != 200 or not data:
    status = url.getcode()
    data = json.load(urllib.urlopen(url))

答案 1 :(得分:0)

import json
import urllib

URL = 'www.google.com'

def get_data_status(url):
    return (json.load(urllib.urlopen(url)), url.getcode())

while 1:
    data, status = get_data_status(URL)
    if data  and (status==200): 
        break

无,False,空字符串,空字典,空数组和0都是错误值。我不认为你正确使用null。当Python解码JSON时,它会将null变为空的对象,即无。

ETA:关于评论:

  

如果api没有任何数据,则将响应返回为null,因此给出null

     

在' if(data == null)'

之后我还有更多的行可以执行

好的,如果您真的从json请求中获得了str(null),并且您想要执行更多代码行"在那件事上:

while 1:
    data, status = get_data_status(URL)
    if (data!='null')  and (status==200): 
        break
    elif (data='null'):
        print 'execute a few more lines of "null" data code'
    elif (status!=200):
        print 'execute a few more lines of wrong status code'

print 'exiting while loop with good data and status 200'