确定是否在Python中定义variables

可能重复:
简单的方法来检查variables是在python中定义的?
如何检查一个variables是否存在于Python中?

你怎么知道variables是否已经在运行时的代码中的特定位置? 这并不总是显而易见的,因为(1)variables可以被有条件地设置,以及(2)variables可以被有条件地删除。 我正在寻找类似于Perl中的defined()或PHP中的isset()defined? 在Ruby中。

 if condition: a = 42 # is "a" defined here? if other_condition: del a # is "a" defined here? 
 try: thevariable except NameError: print "well, it WASN'T defined after all!" else: print "sure, it was defined." 

'a' in vars() or 'a' in globals()

如果你想迂腐,你也可以查看build筑物
'a' in vars(__builtin__)

我认为最好避免这种情况。 写清楚和清晰:

 a = None if condition: a = 42 
 try: a # does a exist in the current namespace except NameError: a = 10 # nope 

对于这个特定的情况,最好做a = None而不是del a 。 这将递减引用计数到对象是(如果有的话)分配给,而不会失败,当没有定义。 请注意, del语句不直接调用对象的析构函数,而是将其从variables中解除绑定。 当引用计数变为零时调用对象的析构函数。

一个可能的情况下,可能需要这样做:

如果您正在使用finally块来closures连接,但在try块中,程序将在定义连接之前使用sys.exit()退出。 在这种情况下, finally块将被调用,连接closures语句将失败,因为没有连接被创build。

如果想要捕捉对象内部未定义variables的尝试,有一个非常简单的方法:

 class Whatever(object): def __getattr__(self, key): return None 

在这里,python首先尝试在对象或对象树中查找属性,并且只有在失败时调用__getattr__(self, key)函数。 这意味着,如果__getattr__被调用,我们可以简单地返回None