检查变量是否为None或numpy.array

时间:2016-09-19 07:18:26

标签: python numpy

如果键具有关联的数组,我会在表中查找。按照设计,我的table.__getitem__() somtimes返回None而不是KeyError - s。我希望此值为None或与w关联的numpy数组。

value = table[w] or table[w.lower()]
# value should be a numpy array, or None
if value is not None:
    stack = np.vstack((stack, value))

只有当我使用上面的代码,并且第一次查找是匹配时,我得到:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

如果我选择value = table[w].any() or table[w.lower()].any(),那么如果它不匹配,我预计会碰到:

AttributeError: 'NoneType' object has no attribute 'any'

我一定错过了正确的方法,怎么做?

4 个答案:

答案 0 :(得分:3)

if type(value) is numpy.ndarray:
    #do numpy things
else
    # Handle None

虽然上述方法可行,但我建议保持签名简单一致,即table [w]应该总是返回numpy数组。如果是None,则返回空数组。

答案 1 :(得分:2)

IIUC这应该有效:

value = table[w]
if value is None:
    value = table[w.lower()]

答案 2 :(得分:1)

使用dict.get

  

如果key在字典中,则返回key的值,否则返回default。如果未给出default,则默认为None,因此此方法永远不会引发KeyError。

value = table.get(w, table.get(w.lower()))

因此,如果不存在table[w],您将获得table[w.lower()],如果不存在,则您将获得None

答案 3 :(得分:0)

该问题已得到回答,但是其他遇到此错误的人可能需要一个一般的解决方案。考虑到明确的想法,我们可以使用函数isinstance。这是一个有效的示例。

import numpy as np

a = np.array([1,2,3])
b = None
for itm in [a,b]:
    isinstance(itm,np.ndarray)

所以在问题中

value = table[w]
if not isinstance(value,np.ndarray):
    value = table[w.lower()]