您如何知道一个变量是否在运行时在代码的特定位置设置了?这并不总是显而易见的,因为(1)变量可以有条件地设置,(2)变量可以有条件地删除。我在寻找像定义()在Perl或isset()在PHP或定义?在Ruby中。

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:
    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.")

vars()中的'a'或globals()中的'a'

如果你想要学究,你也可以检查内置 vars中的'a' (__builtins__)

我觉得最好还是避免这种情况。这样写会更清晰明了:

a = None
if condition:
    a = 42

可能需要这样做的一种情况是:

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