如果键具有关联的数组,我会在表中查找。按照设计,我的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'
我一定错过了正确的方法,怎么做?
答案 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()]