我正在構建一個簡單的 Flask 應用程式,我想知道我是否可以像我們在finally塊之后的try-except塊中那樣執行一個操作,但前提是 try 成功并且return在 try 塊中的陳述句之后。
我試過了,else但else之后沒有執行return。
這與我想做的事情相去甚遠:
def delete(self,pet_id):
if pet_id:
pet = None
try:
pet = [pet for pet in self.pets if pet.get("id")==pet_id][0]
return jsonify({"pet": pet}), HTTPStatus.OK
except Exception as exc:
return (
f"The pet id provided: {pet_id}, does not exist",
HTTPStatus.BAD_REQUEST,
)
else:
self.pets.remove(pet)
uj5u.com熱心網友回復:
您可以檢查您想要實作的操作是否確實完成,然后像這樣洗掉變數:
def delete(self,pet_id):
if pet_id:
pet = None
try:
pet = [pet for pet in self.pets if pet.get("id")==pet_id][0]
return jsonify({"pet": pet}), HTTPStatus.OK
except Exception as exc:
return (
f"The pet id provided: {pet_id}, does not exist",
HTTPStatus.BAD_REQUEST,
)
finally:
if pet:
self.pets.remove(pet)
uj5u.com熱心網友回復:
這個解決方案沒有回答問題,因為我沒有使用finally塊,但我仍然認為值得指出的finally是,解決這個問題不需要塊。
Python 使用參考計數,因此當您保存要回傳的值時pet,參考計數就增加了 1。這意味著當您使用 line洗掉petfromself.pets時self.pets.remove(pet),該物件不會在記憶體中清除,您仍然可以在下一行回傳它。
我認為您想要的邏輯“僅在嘗試成功時才執行 X”不屬于 finally 塊,它屬于try塊內。
因此,我建議按如下方式重構您的代碼:
def delete(self,pet_id):
if pet_id:
try:
pet = [pet for pet in self.pets if pet.get("id")==pet_id][0]
self.pets.remove(pet)
return jsonify({"pet": pet}), HTTPStatus.OK
except Exception as exc:
return (
f"The pet id provided: {pet_id}, does not exist",
HTTPStatus.BAD_REQUEST,
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380530.html
