Какой код лучше для читабельности? Является ли это плохой практикой? [закрыто]

Здравствуйте, у меня есть код, который выглядит примерно так (в представлениях)

    if request.method == "POST":
        formset1 = Formset1(
            request.POST, form_kwargs={"id": id}, prefix="form1"
        )
        formset2 = Formset2(
            request.POST, form_kwargs={"id": id}, prefix="form2"
        )
        if (
            form.is_valid()
            and formset1.is_valid()
            and formset2.is_valid()
        ):
            service = Service()
            try:
                service.save(form, formset1, formset2)
            except ValidationError as e:
                form.add_error("some error", e)
                context = {
                    "form": form,
                    "formset1": formset1,
                    "formset2": formset2,
                }
                return render(request, "form.html", context)

            return redirect("list")
    else:
        formset1 = Formset1(
            prefix="form1",
            form_kwargs={"id": id},
            queryset=items1.all(),
        )
        formset2 = Formset2(
            prefix="form2",
            form_kwargs={"id": id},
            queryset=items2.all(),
        )

    context = {
        "form": form,
        "formset1": formset1,
        "formset2": formset2,
    }
    return render(request, "form.html", context)

Однако я думаю, что код был бы более читабельным следующим образом:

    if request.method == "POST":
        formset1 = Formset1(
            request.POST, form_kwargs={"id": id}, prefix="form1"
        )
        formset2 = Formset2(
            request.POST, form_kwargs={"id": id}, prefix="form2"
        )
        if (
            form.is_valid()
            and formset1.is_valid()
            and formset2.is_valid()
        ):
            try:
                service = Service()
                service.save(form, formset1, formset2)
                return redirect("list")
            except ValidationError as e:
                form.add_error("some error", e)

    else:
        formset1 = Formset1(
            prefix="form1",
            form_kwargs={"id": id},
            queryset=items1.all(),
        )
        formset2 = Formset2(
            prefix="form2",
            form_kwargs={"id": id},
            queryset=items2.all(),
        )

    context = {
        "form": form,
        "formset1": formset1,
        "formset2": formset2,
    }
    return render(request, "form.html", context)

На мой взгляд, второй вариант лучше, поскольку в нем меньше повторений кода, и это

    context = {
        "form": form,
        "formset1": formset1,
        "formset2": formset2,
    }
    return render(request, "form.html", context)

используется только один раз вместо двух, и для меня это выглядит более читабельно.

Однако я слышал, что считается плохой практикой добавление строк кода, которые не бросают исключение, в блок try, как это:

            try:
                service = Service()
                service.save(form, formset1, formset2)
                return redirect("list")
            except ValidationError as e:
                form.add_error("some error", e)

поскольку только service.save(form, formset1, formset2) бросает здесь исключение, и почему-то это выглядит менее читабельно для других.

Я знаю о принципе DRY, но есть ли другие книги, видео или руководства по стилю для этого в python/общем?

Вернуться на верх