我使用以下条件语句来定义metric:metric = "FAIL" if ((self.Mean <= -20.0) & (self.area_ratio>= 0.8)) else "PASS"有时,self.area_ratio =“NA”。这当然给了我错误: TypeError: '>=' notsupported Between Examples of 'str' and 'float'.如何保持此条件语句格式来定义metric,同时支持 self.area_ratio 可以等于“NA”或可以等于整数?如果self.area_ratio =“NA”,则度量应等于“PASS”。
3 回答
偶然的你
TA贡献1841条经验 获得超3个赞
or
如果你使用而不是 ,结果会更容易and
。 &
用于位操作,所以这是您的主要问题。
假设这是您将获得的唯一两个值(浮点数或字符串“NA”),您可以这样做:
metric = "PASS" if self.area_ratio == "NA" or self.area_ratio >= 0.8 else "FAIL"
这不是一种超级可靠的方法,但由于您已经在同一变量中混合类型......
繁星淼淼
TA贡献1775条经验 获得超11个赞
这就是您所需要的。self.area_ratio如果不是数字,您将抛出异常。所以你只需捕获该异常并设置metric为PASS当你这样做时。
try:
metric = "FAIL" if (self.area_ratio >= 0.8) else "PASS"
except TypeError as ex:
metric = "PASS"
如果您想对其他非数字值执行不同的操作,则可以在子句中添加更多逻辑except来处理非数字值之间的区分行为。
如果您确定这NA是您将看到的唯一非数字值,则可以将其添加到条件语句中,如下所示:
metric = "PASS" if self.area_ratio == 'NA' or (self.area_ratio < 0.8) else "FAIL"
self.area_ratio但是如果有任何其他非数字值,这将引发您不处理的异常。
慕田峪9158850
TA贡献1794条经验 获得超7个赞
metric = "PASS" if isinstance(self.area_ratio, str) else ("FAIL" if ((self.area_ratio != "NA") & (self.area_ratio>= 0.8)) else "PASS")
只要每个字符串都通过,也可以工作,但我不建议在一行中进行。
添加回答
举报
0/150
提交
取消