有沒有辦法跳過引數或稍后定義它?我正在嘗試使用 if-elif-else method< 檢查 json 中的值,但我遇到了一個問題。
這是我的代碼:
import requests
ps = {"page_size": 1}
resp = requests.get("api.url.com", params=ps)
json_response=resp.json()
if len(json_response["items"])==5:
print(json_response)
elif len(json_response["items"])==10 or len(json_response["items"])==15:
print("Page size is not 5")
else:
print(json_response["error"]["message"])
問題是我的引數使用。使用這個特定的 API,您可以使用 "page_size": 5, 10 或 15 并獲得如下的 json:
{
"total": ,
"items": [
{
"id": 1,
"name": "Frank"
}
]
}
但是,當我嘗試使用諸如 "page_size": 1 之類的負引數時,API 會以不同的正文進行回應:
{
"error": {
"id": "71f2",
"message": "Wrong data"
}
}
使用我的代碼,我在第 7 行收到錯誤(KeyError: 'items')。據我了解,我的代碼在錯誤回應中找不到任何專案,因為沒有,并且無法繼續執行最后一個“else”。
有什么方法可以正確設定引數,因此對于來自 API 的不同回應,我的代碼會相應地采取行動嗎?在我的最后一個 else 中,我想列印錯誤訊息,這就是為什么我需要通過這種方法。
uj5u.com熱心網友回復:
.get()如果鍵不存在,您可以使用來提供默認值。
items = json_response.get("items", [])
if len(items) == 5:
print(json_response)
elif len(items) == 10 or len(items) == 15:
print("Page size is not 5")
else:
print(json_response["error"]["message"])
但更好的是先檢查它是否是錯誤:
if "error" in json_response:
print(json_response["error"]["message"])
elif len(json_reponse["items"]) == 5:
print(json_response)
elif len(json_response["items"])==10 or len(json_response["items"])==15::
print("Page size is not 5")
順便說一句,如果您使用了"page_size": 5但退回的商品少于 5 件會怎樣?您不會列印回應。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/318426.html
