我想知道代码之前是否已在某处定义过数组。
像a.exist()
这样的东西如果存在则给出True,如果不存在则给出False。
我尝试了a.size:
,但如果数组尚未存在,则会显示错误消息,我想避免这种消息。
如果你想知道的话,要求这种情况发生在一个循环中。
答案 0 :(得分:5)
您需要使用try / except块:
try:
_ = a.shape
except NameError:
print('a does not exist.')
except AttributeError:
print('a does not have a shape property.')
正如@padraic指出的那样,这真的不应该首先发生。最好初始化变量(例如a = None
),然后检查它们是否已设置(例如if a: print('a is set') else: print('a has not been set')
)
答案 1 :(得分:1)
如果您想确保a
是numpy
数组而不是任何其他可能包含size
变量或方法的类型,您可以检查变形类型如果未定义变量,请尝试使用块来处理异常。这样,只有当a
存在并且是numpy
数组时才会继续。
import numpy as np
a = np.array([1,2])
try:
if isinstance(b,np.ndarray):
print("TRUE")
except NameError:
print("FALSE")
答案 2 :(得分:1)
Python有一些内置函数,如果在当前/本地/全局范围内分配变量,则可以使用它。
例如,检查当前本地scopy使用中是否定义了变量:
if 'a' in dir():
# Variable a is defined.
if hasattr(a, 'shape'):
# Probably a numpy array, at least it has a shape.
但是这不是很好的python,try/except
更常见但是为了完整性,我认为值得一提的是你可以不用任何尝试/除外。
if 'a' in dir():
print('yes')
else:
print('no')
# prints 'no' because we haven't defined any variable a
a = np.array([1,2,3])
if 'a' in dir():
print('yes')
else:
print('no')
# prints 'yes' because I defined it
del a
if 'a' in dir():
print('yes')
else:
print('no')
# prints 'no' because I deleted the variable again
答案 3 :(得分:0)
使用try/except NameError
包装器是很好的Python。但是事先将变量初始化为有用的东西同样好。我不认为速度有很大差异,但代码更具可读性。
例如:
for i in range(5):
a += 4
会产生一个
NameError: name 'a' is not defined
可以被困:
for i in range(5):
try:
a += 4
except NameError:
a = np.arange(5)
但我可以提前定义a
。如果我事先不知道None
的第一个值应该是什么,那么a
是一个方便的价值:
a=None
for i in range(5):
if a is None:
a=np.arange(5)
a += 4
另一种常见的numpy
做法是从空列表开始,并在那里累积值。
a = []
for i in range(5):
a.append(np.ones(4)*i)
a = np.array(a)