2017-10-23 11 views
-1

:파이썬 : 예외 처리 표현 내가 HTTP 요청에 적용 할 때 항상 기본 가치를 내가 동료로 일부 Google 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) 

나는 시도-예외가 excption 경우를 처리 사용하려고 할 때 네트워크 오류. 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의 실패의 reults를 얻을 이러한 예외를 사용하려고 할 때. HTTP 요청의 onlly failture가 실패 결과를 얻을 동안

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

방법, 성공적인 결과가 올바른 문자열 reuslt을 얻을 것입니다 있는지 확인하기 위해?

+2

이되는 것 - 실제 오류가 'Sydney'()로 변환하는 success()를 호출하려고에 발생합니다. 모든 예외를 잡는 중입니다. 무슨 일이 일어나고 있는지 정확히 알려주지 만 매우 유용한 예외 메시지가 숨겨져 있습니다. – user2357112

답변

0

이 함수는 success 인수로 전달해야합니다. 현재

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

당신은 'Sydney'입니다 get_address(-33.865, 151.2094)의 결과 값을 전달하고 있습니다. 뭔가를 str object is not callable

적절한 전화처럼 당신은 항상 당신이 기대하는 특정 예외를 잡을해야하는 이유

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