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

Nik*_*yks 6 python numpy

我在表中查找键是否具有关联的数组。通过设计,我的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,则返回空数组。


ajr*_*rds 6

问题已得到解答,但遇到此错误的其他人可能需要通用解决方案。考虑到明确的想法,我们可以使用函数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)


Sto*_*ica 4

IIUC 这应该有效:

value = table[w]
if value is None:
    value = table[w.lower()]
Run Code Online (Sandbox Code Playgroud)