Какой код лучше для читабельности? Является ли это плохой практикой? [закрыто]
Здравствуйте, у меня есть код, который выглядит примерно так (в представлениях)
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/общем?