我有以下python函数:
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行运行?
答案 0 :(得分:4)
这段代码:
if raw_api_data != 'api error 1' or 'api error 2':
实际上被解释为
if (raw_api_data != 'api error 1') or ('api error 2'):
在Python中,非空字符串总是会计算为True。
你应该使用:
if (raw_api_data != 'api error 1') and (raw_api_data != 'api error 2'):
或
if not raw_api_data in ('api error 1', 'api error 2'):
答案 1 :(得分:2)
Or
被称为逻辑OR运算符。如果两个操作数中的任何一个非零,则条件变为真。 (source)
请改用:
if (raw_api_data != 'api error 1') and (raw_api_data != 'api error 2'):