我有一個 Flask 應用程式。該應用程式將一個 JSON 檔案發送到服務器,在那里使用 jsonify 對其進行決議。然后使用新決議的物件呼叫第三方 API。我在設定方面很掙扎,因為我似乎無法使用 jsonified 回應物件從函式內部呼叫第三方 API。
我的決議功能
@site.route('/data', methods=['POST'])
def parse_request():
data = request.get_json()
print(data)
return jsonify(success=True)
buy(data)
print(data) 看起來像這樣:
data = [{'id': '001', 'product': 'Tshirt', 'price': '9.99', 'quantity': '1'}, {'id': '002', 'product': 'Trousers', 'price': '19.99', 'quantity': '3'}, {'id': '003', 'product': 'Jacket', 'price': '29.99', 'quantity': '2'}]
如果我移到buy(data)return 陳述句上方,則會出現以下錯誤:
AttributeError: 'list' object has no attribute 'keys'.
呼叫第三方API:
def buy(data):
for key in data.keys():
id = data[key]['id']
quantity = data[key]['quantity']
api.submit_order(
product=product,
quantity=quantity
print((f"Submitted order for {quantity} piece(s) of {product}(s)"))
return
根據我呼叫buy(data)的位置parse_request(),我要么得到屬性錯誤,要么什么也沒有發生。我究竟做錯了什么?
uj5u.com熱心網友回復:
資料是一個list的dict物件。您可以使用for item in data. 如果要迭代 a 的鍵,則
該keys屬性是必需的dict。
def buy(data):
for item in data:
id = item['id']
quantity = item['quantity']
api.submit_order(
product=product,
quantity=quantity
)
print(f"Submitted order for {quantity} piece(s) of {product}(s)")
return
uj5u.com熱心網友回復:
如果我移到
buy(data)return 陳述句上方,則會出現以下錯誤
當屬性錯誤只會觸發buy(data)是以上的回報,因為一旦return在函式內部達成的陳述句,被執行后,沒有什么。
# This just returns 'a':
def fn():
return 'a'
print ('b')
# On the other hand, this prints 'b', then returns 'a'
def fn2():
print ('b')
return 'a'
考慮到這一點,至于實際錯誤:
`AttributeError: 'list' object has no attribute 'keys'.`
串列型別沒有key屬性(只有字典有)。記住data是字典串列。
我想你想要更像的東西:
def buy(data):
for row in data:
product = row['product']
quantity = row['quantity']
api.submit_order(
product=product,
quantity=quantity )
print((f"Submitted order for {quantity} piece(s) of {product}(s)"))
return
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334867.html
