Check if variable is defined with Numpy array?
有时我想测试一个变量是0还是None。在纯Python中,这只是
但当foo可能是一个麻木的对象(如numpy.ndarray时,这就不再有效了,我得到了错误:
1 2
| ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all() |
在这种情况下,我需要a.any(),但是这在不可度量的对象上失败了。
当然,我可以明确地检查foo是0还是None,但我想知道是否有更优雅的方法来做到这一点。
如何检查任意对象(包括iterable和not)是否为True?
- 更确切地说,是if foo,这对大多数事情都有效。不幸的是,您必须使用numpy.ndarray或任何其他比0更复杂的类型,none,false,len()==0等于false。
- 我通常用array is None来检查numpy对象是否为none,但这并不检查0。有关类似问题,请参阅此处stackoverflow.com/questions/5086178/…
用np.all或np.any代替.all方法。如果不是一个数组,np.all将创建一个数组。
- 请注意,这并不像你想象的那样适用于所有的iTerables:np.any(False for _ in range(10))产生True。(当然,如果这是一个列表理解而不是一个生成器的话,它是可以工作的。)基本上,它评估了不可迭代实例的逻辑真实性,而不是从内容中创建一个数组。你可以和np.fromiter一起解决这个问题,但这是一个额外的步骤。不过,如果您只想处理大多数情况,那么使用np.all等是迄今为止最干净的解决方案。
- 这似乎是一个合适的解决方案,谢谢!对于我来说,生成器异常并不是真正的问题,但是很高兴知道存在潜在的陷阱。
我使用的方法是包围语句,假设try-except块中存在变量:
1 2 3 4
| try:
do_something(foo)
except NameError:
foo = something |