Home > Software design >  How to run code in finally block but only after after try block succeeded?
How to run code in finally block but only after after try block succeeded?

Time:12-12

I am building a simple flask app and I was wondering if I could perform one action like we do in the finally block after a try-except block but ONLY if the try succeeded and AFTER a return statement in the try block.

I tried else but else does not execute after return.

This is short of what I would like to do:

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)

CodePudding user response:

You could short of check if the operation that you wanted to achieve is indeed completed and then remove the variable like so:

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)

CodePudding user response:

This is how you need to structure your code for it to work:

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,
        )

There is no point in running the remove() call if pet_id is not found.

  • Related