【发布时间】:2019-03-12 02:33:35
【问题描述】:
大多数语言都有办法通过强制 if 中的所有布尔值都被评估来强制“尽早且经常失败”。
假设我在 Python 中有以下 if 语句:
if(age>100 or patient_is_brain_dead or patient_lacks_left_arm):
do something...
问题是我可能忘记为“patient_is_brain_dead”或“has_no_left_arm”设置布尔值。
由于大多数活着的人都在 100 岁以下,因此测试 2 和 3 很少发生,因为 Python 看到前面的“或”会停止评估年龄是否小于 100 以节省时间。
我的代码受大量计算限制,因此测试所有三种情况的开销不会降低性能,但会发现很多潜在的错误,这些错误可能会在 500 分之一的情况下发生。
有没有办法强制 Python 对它们全部进行评估?不要建议颠倒顺序,因为任何情况都可能是罕见的,具体取决于用户输入。
【问题讨论】:
-
我认为unit tests在这里可能有用。
-
...或者通过明确检查
patient_is_brain_dead is not None and patient_lacks_left_arm is not None,又名“忘记设置”,然后引发异常? -
我认为这可行,但这是一种相当迂回的方法。我认为把它放在括号里就可以了,但可惜不是。
-
脑死亡和左臂检查通常将发生在您写的那一行,因为如果左侧为假,
or必须继续进行。跨度> -
@eSurfsnake,这是错字吗?根据您的描述,您似乎想要逻辑
if age < 100 or ... or ...。
标签: python python-3.x boolean-expression