我使用以下條件語句來定義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
提交
取消