我想知道在代码中是否已经定义了某个数组。类似于
我尝试过
如果你想知道,这种情况发生在一个循环中。
a.exist()
,如果存在则返回True,否则返回False。我尝试过
a.size:
,但如果数组还不存在,则会出现错误消息,我希望避免这种情况。如果你想知道,这种情况发生在一个循环中。
你需要使用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')
)。
if a:
,其中 a
是一个数组,它会尝试评估 a
中的所有条目,并返回错误:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
。请使用 a.any()
或 a.all()
来解决该问题。注意,不要改变原始含义。 - AkuPython有一些内置函数,可以检查变量是否在当前/本地/全局作用域中分配。
例如,要检查变量是否在当前本地作用域中定义,请使用:
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
更加常见。为了完整起见,我认为值得提一下,你可以在没有任何 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
locals
和 globals
也很重要。如果您想确保a
是一个numpy
数组,而不是任何其他可能具有size
变量或方法的类型,您可以在try块中检查包含的类型以处理异常情况,以防该变量未定义。这样,只有在a
存在且是numpy
数组时才会继续执行。
import numpy as np
a = np.array([1,2])
try:
if isinstance(b,np.ndarray):
print("TRUE")
except NameError:
print("FALSE")
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
。如果我事先不知道a
的第一个值应该是什么,那么None
是一个方便的值:
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)
if (a is not None):
#Do something if it exists
else:
#Do something if it does not exist
try
except
范围内。 - Anton Protopopovif a:
或者if "a" in vars():
怎么样? - Hugh Bothwell