Python:避免短路评估

2024-04-25 21:30:05 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我在做Django项目时遇到的一个问题。它是关于表单验证的。

在Django中,当您有一个提交的表单时,可以对相应的表单对象调用is_valid(),以触发验证并返回一个布尔值。所以,通常在视图函数中有这样的代码:

if form.is_valid():
    # code to save the form data

is_valid()不仅验证表单数据,还将错误消息添加到表单对象中,以便以后向用户显示。

在一个页面上,我同时使用两个表单,并且还希望仅当两个表单都包含有效数据时才保存数据。这意味着在执行代码以保存数据之前,我必须在两个窗体上调用is valid()。最明显的方式是:

if form1.is_valid() and form2.is_valid():
    # ...

因为逻辑运算符的短路评估而无法工作。如果form1无效,则不会计算form2,并且它的错误消息将丢失。

这只是一个例子。据我所知,在其他语言(如Smalltalk)中,除了and/or之外,没有其他贪婪的选择。我可以想象这个问题是在不同的情况下发生的(不仅仅是在Python中)。我能想到的解决方案都很笨拙(嵌套ifs,将返回值赋给局部变量,并在if语句中使用它们)。我想知道解决这种问题的方法。

提前谢谢!


Tags: and数据项目对象django代码form消息