我在表中查找键是否具有关联的数组。通过设计,我的table.__getitem__()somtimes返回None而不是KeyError-s。我希望此值为None或与关联的numpy数组w。
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))
Run Code Online (Sandbox Code Playgroud)
仅当我使用上面的代码并且第一次查找是匹配项时,我得到:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)
如果我选择value = table[w].any() or table[w.lower()].any(),那么如果不匹配,我可能会碰到:
AttributeError: 'NoneType' object has no attribute 'any'
Run Code Online (Sandbox Code Playgroud)
我一定错过了正确的方法,该怎么办?
小智 8
if type(value) is numpy.ndarray:
#do numpy things
else
# Handle None
Run Code Online (Sandbox Code Playgroud)
尽管上述方法可行,但我建议保持签名简单一致,即table [w]应始终返回numpy数组。如果为None,则返回空数组。
问题已得到解答,但遇到此错误的其他人可能需要通用解决方案。考虑到明确的想法,我们可以使用函数isinstance。这是一个工作示例。
import numpy as np
a = np.array([1,2,3])
b = None
for itm in [a,b]:
isinstance(itm,np.ndarray)
Run Code Online (Sandbox Code Playgroud)
所以在问题的背景下
value = table[w]
if not isinstance(value,np.ndarray):
value = table[w.lower()]
Run Code Online (Sandbox Code Playgroud)
IIUC 这应该有效:
value = table[w]
if value is None:
value = table[w.lower()]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12485 次 |
| 最近记录: |