如何检查variables是否存在?

我想检查一个variables是否存在。 现在我正在做这样的事情:

try: myVar except NameError: # Do something. 

有没有其他的方式没有例外?

检查局部variables的存在:

 if 'myVar' in locals(): # myVar exists. 

检查是否存在全局variables:

 if 'myVar' in globals(): # myVar exists. 

要检查一个对象是否有一个属性:

 if hasattr(obj, 'attr_name'): # obj.attr_name exists. 

没有定义的variables的使用在任何语言中都是不好的,因为它表示程序的逻辑没有被正确地考虑。

Python会假设你知道你在做什么,否则你会使用VB :-)。

下面的技巧与您的类似,将确保variables在使用前具有一定的价值:

 try: myVar except NameError: myVar = None # Now you're free to use myVar without Python complaining. 

但是,我仍然不认为这是一个好主意 – 在我看来,你应该重构你的代码,这样就不会发生这种情况。

使用try / except是testingvariables存在的最好方法。 但是,设置/testing全局variables几乎肯定是一个更好的方法,可以做任何你正在做的事情。

例如,如果你想在第一次调用某个函数的时候初始化一个模块级的variables,那最好用这样的代码:

 my_variable = None def InitMyVariable(): global my_variable if my_variable is None: my_variable = ... 

对于对象/模块,你也可以

 'var' in dir(obj) 

例如,

 >>> class Something(object): ... pass ... >>> c = Something() >>> ca = 1 >>> 'a' in dir(c) True >>> 'b' in dir(c) False 

catch except在Python中被调用。 除此之外,对于这种简单的情况来说也是可以的。 有AttributeError可以用来检查一个对象是否有一个属性。

我会假设testing将被用于一个函数,类似于user97370的答案 。 我不喜欢这个答案,因为它污染了全局命名空间。 解决这个问题的一个方法是使用一个类来代替:

 class InitMyVariable(object): my_variable = None def __call__(self): if self.my_variable is None: self.my_variable = ... 

我不喜欢这样,因为它使代码复杂化,并打开一些问题,如果这确认Singleton编程模式? 幸运的是,Python允许函数有一段时间的属性,这给了我们这个简单的解决scheme:

 def InitMyVariable(): if InitMyVariable.my_variable is None: InitMyVariable.my_variable = ... InitMyVariable.my_variable = None 

一种处理这种情况的方法通常不会显式检查variables是否存在,而只是在可能不存在的variables的第一个用法中包含一个try / except NameError:

 # Search for entry. for x in y: if x == 3: found = x # Work with found entry. try: print('Found: {0}'.format(found)) except NameError: print('Not found') else: # Handle rest of Found case here ... 

一个简单的方法是先初始化myVar = None;

接下来:

 if myVar: #Do something 

这只是对以前答案的补充,以检查在JSON / Dict中是否存在一个键或不在Python中

'Json / Dict对象名'.has_key('键名')

这将返回True或False

尝试:`

 Myvariable = ['v', 'a', 'r'] try: print(Myvariable) except Nameerror: print('variable \"Myvariable\" not found') 

希望这可以帮助!

这将工作,看看variables是否存在。

 if myvar: #It exists else: #It doesn't exist