Python:try-except当我尝试在http请求上应用它时,Expression总是得到默认值

时间:2017-10-23 21:02:56

标签: python http exception xmlhttprequest

我使用一些谷歌API作为研究员:

def get_address(lat, lng):
    url = "https://maps.googleapis.com/maps/api/geocode/json?{}".\
      format(urllib.parse.urlencode(args))
    ...
    try:
       r = requests.get(url)
       ...
       return r
    except OSError as e:
       raise NetException(e.message, 400)

当我尝试使用try-exception句柄时,如果网络错误则使用。 the try-exception Expression is from here

def try_except(success, failure, *exceptions):
    try:
        return success()
    except exceptions or Exception:
        return failure() if callable(failure) else failure

但是当我尝试使用这些异常时,我总是得到http的失败结果,即使我只是运行成功函数我得到了成功结果。

>>> re=get_address(-33.865, 151.2094)
>>> re
'Sydney'
>>> r=try_except(get_address(-33.865, 151.2094),"")
>>> r
''

如何确保成功的结果将获得正确的字符串重用,而http请求的onlly失败会得到失败的结果?

1 个答案:

答案 0 :(得分:0)

您必须将函数作为success参数传递。目前在

r=try_except(get_address(-33.865, 151.2094),"")

您传递get_address(-33.865, 151.2094)的结果值'Sydney'。尝试致电success()并转换为'Sydney'()时出现实际错误 - 类似于str object is not callable

正确的电话会是

r=try_except(lambda: get_address(-33.865, 151.2094), '')