您如何知道一个变量是否在运行时在代码的特定位置设置了?这并不总是显而易见的,因为(1)变量可以有条件地设置,(2)变量可以有条件地删除。我正在寻找一些东西,如Perl中的defined()或PHP中的isset()或Ruby中的defined?。
defined()
isset()
defined?
if condition: a = 42 # is "a" defined here? if other_condition: del a # is "a" defined here?
try: a # does a exist in the current namespace except NameError: a = 10 # nope
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()
如果你想要学究,你也可以检查内置的 'a' in vars(__builtins__) < / p >
'a' in vars(__builtins__)
我觉得最好还是避免这种情况。这样写会更清晰明了:
a = None if condition: a = 42
对于这种特殊情况,最好使用a = None而不是del a。这将减少对象a的引用计数(如果有的话),并且当a没有定义时不会失败。注意,del语句并不直接调用对象的析构函数,而是将其与变量解绑定。当引用计数为零时,调用对象的析构函数。
a = None
del a
a
del
可能需要这样做的一种情况是:
如果你使用finally块来关闭连接,但在try块中,程序在定义连接之前使用sys.exit()退出。在这种情况下,finally块将被调用,连接关闭语句将失败,因为没有创建连接。
finally
try
sys.exit()