[英]Dealing with NA values in a conditional statement using comparison operators
我使用以下条件语句来定义metric :
metric = "FAIL" if ((self.Mean <= -20.0) & (self.area_ratio>= 0.8)) else "PASS"
有时, self.area_ratio = "NA"。
这当然给了我错误:TypeError: '>=' not supported between 'str' and 'float'.
我怎样才能保持这个条件语句格式来定义metric ,同时支持 self.area_ratio 可以等于“NA”或可以等于一个整数? 如果self.area_ratio = "NA",度量应该等于 "PASS"。
谢谢!
这是你需要的。 如果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
是任何其他非数字值,那将抛出一个你没有处理的异常。
如果您使用or
代替and
,结果会更容易。 &
用于位操作,所以这是您的主要问题。
假设这些是您将获得的仅有的两个值(浮点数或字符串“NA”),您可以这样做:
metric = "PASS" if self.area_ratio == "NA" or self.area_ratio >= 0.8 else "FAIL"
这不是一种超级可靠的方法,但是由于您已经在同一个变量中混合了类型......
metric = "PASS" if isinstance(self.area_ratio, str) else ("FAIL" if ((self.area_ratio != "NA") & (self.area_ratio>= 0.8)) else "PASS")
只要每个字符串都通过,它也可以工作,但我不建议在一行中进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.