确定是否在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
。