我如何将这段代码编写为“ try-except”块而不是几个if块?

我已经编写了django FormView来处理表单集,并且最近向我介绍了“ try try”语法。我有一种感觉,如果我使用“ try try”块,则我的代码将是DRYer,但是我正在使用writers块。您将如何将该格式重新设置为“尝试除外”?

    def post(self,request,*args,**kwargs):
        formset_post = self.formset(request.POST)
        if 'url_fk_id' not in kwargs:
            kwargs['url_fk_id'] = self.kwargs.get(self.url_fk_id)

        form_fk_id = get_object_or_404(models.Fk,id=kwargs['url_fk_id'])

        for form in formset_post:
            form.instance.fk_id = form_fk_id
            list_of_primary_entries = []
            if form.instance.entry_is_primary is True:
                if True not in Entry.objects.filter(fk_id=form_fk_id).values()
                    pass
                else:
                    raise forms.ValidationError("there can only be one primary entry")
                list_of_primary_entries.append('4')
        if len(list_of_primary_entries) > 1:
            raise forms.ValidationError("there can only be one primary entry")
        if formset_post.is_valid():
            for form in formset_post:
                form.save()
        else:
            return self.form_invalid(formset_post)
        print(self.request.POST)
        return super().post(self,**kwargs)
a35689 回答:我如何将这段代码编写为“ try-except”块而不是几个if块?

我不认为您的代码从try / except块中获得任何收益。 try / except块是跳过某些检查并仅查看发生情况的一个很好的捷径。例如:

true

相比:

inum = input('Enter a number:')
if inum.isdigit():   # check if inputted string looks valid BEFORE trying to convert
    num = int(inum)
else:
    num = -1
    print('Oops!')

此外,try / except块旨在捕获引发的异常,以使代码即使发生错误也能继续运行,从而更加健壮。您可能想抛出可能在try / except块内失败的可疑呼叫。例如,您可能想要:

inum = input('Enter a number')
try:       # just try to convert it and see what happens!
    num = int(inum)
except:
    num = -1
    print('Oops!)

成为:

    form_fk_id = get_object_or_404(models.Fk,id=kwargs['url_fk_id'])

,然后处理对get_object_or_404()的调用失败的情况。如果您正在拨打互联网电话或访问一些当前不可用的外部资源,这可能会有所帮助。最好让您的代码捕获并处理它,而不是失败。例如,如果您尝试访问外部资源,如果呼叫失败,则可能需要在一定时间后重试,等等。

以上只是我的两分钱。意见各不相同...但是我确实发现,良好的错误检查总是很好。它使您的代码更健壮,更易读。 编码愉快!

本文链接:https://www.f2er.com/3070659.html

大家都在问