我正在通过硬件从给定的库中读取。我可能会得到一个numpy数组,或者 - 如果硬件出错 - 一个None
。
我想检查None
并跳过包含它们的事件:
for event in hardware.events():
val1 = event.get_first_value()
val2 = event.get_second_value()
#potentially more of the above
if None in (val1, val2):
continue
我一直认为这是进行此测试最干净的方法。特别是,当有更多值要比较时。但是,我刚刚得到了这个FutureWarning:
FutureWarning: comparison to `None` will result in an elementwise object comparison in the future.
我理解这是来自change numpy如何处理相等(==
)比较。我也理解它背后的原因......
解决方案显然是这样做的:
if val1 is None or val2 is None:
continue
然而,当我将vali的列表扩展到i = 2之外时,这将会非常快速地看起来很丑...
因此,我想知道这个更改是否实际上适用于我的示例中的in
语句?我会看到测试结果错误吗?据我所知,in
无论如何都会测试每个元素的相等性(==
)和身份(is
)。另外,numpy的新元素检查会引入性能变化吗?
如果它实际上改变了结果,是否有另一种简洁的方法来执行相同的测试? (即使我的原始测试永远不会失败,只是为了摆脱FutureWarning消息,对此的答案可能会有用...)
答案 0 :(得分:2)
你可以试试这个:
import numpy as np
# Some fake data
vals = (np.zeros(5), None)
# Test whether data contains None
if any(x is None for x in vals):
# Do stuff