나는 다음과 같은 파이썬 기능이 있습니다이 "if"문 안의 코드가 아직 실행되는 이유는 무엇입니까?
api_function:
try:
# api query
except:
# api error #1
return "api error 1"
except:
# api error #2
return "api error 2"
else:
return api_data_dict
나는이 기능을 실행하려면, 그리고 오류가 존재하지 않는 경우는, 데이터가 API에서 반환 해석 : 나는이 코드를 실행하면
for call in api_call_list:
raw_api_data = api_function(access_token)
if raw_api_data != 'api error 1' or 'api error 2':
page_name = raw_api_data['name']
# process api data
을, API가 작동하는 한 정상적으로 실행됩니다. API가 오류를 칠 때 그러나 if
문은 문자열을 잡으려고하지 않는 것 - 대신에, 나는 역 추적 얻을 :
Traceback (most recent call last):
File "api_retriever.py", line 4, in <module>
page_name = raw_api_data['name']
TypeError: string indices must be integers, not str
왜 오류 문자열을 잡기 내 if
문에 의해 반환되지 않습니다 내 api_function
및 줄 4가 고르지 못하도록합니까?
예외를 잡기 및 오류 코드를 반환 - 호출 측에 확인해야 - 대신 발신자 캐치 예외를 댄다는 오히려 이상한 패턴이다. 아니면 반 패턴이라고해야합니까? –
어떻게 구조화해야할지 모르겠다. API 호출이 성공적으로 반환 된 경우에만 API 데이터를 구문 분석하고 싶습니다. 그 함수를 여러 번 사용하기 때문에 api 데이터를 처리하는 로직을 API 호출 함수 내부에 넣을 수는 없으며 데이터를 약간 다르게 처리하려고 할 때마다 사용할 수 있습니다. –
예외를 전파하여 상위 레벨에서 잡으십시오 (결국 예외 유형이 너무 많아지면 간단히 처리 할 수 있습니다). 또는이를 잡아서 'api_function' 레벨에서 로그 한 다음'None' 만 리턴하십시오. 예외가있는 전체 요점은 오류 코드를 피하는 것입니다 ... –