如何测试变量在使用前是否已初始化?

6 投票
2 回答
22199 浏览
提问于 2025-04-15 19:31

假设你有一个应用程序,其中有一个变量,你会在独立加载它的时候创建这个变量的实例(也就是说,当你使用 if __name__ == '__main__' 时)。

另外,还有一个方法是为了当客户端在其他应用程序中导入这个应用时调用的。这个方法也会创建这个变量的实例。

我想做的是在定义这个变量之前,先测试一下它是否已经被创建过(这样我就不需要重复创建这个对象了)。我本能地想用 if SOME_VARIABLE is not None: #在这里创建,但是这样会出现错误:

本地变量 'SOME_VARIABLE' 在赋值之前被引用

这是怎么回事呢?

2 个回答

4

你可以试试 if 'varname' in locals() 这个写法(你可能还需要检查 globals(),还有其他一些地方),或者直接尝试使用这个变量,如果它不存在的话,会抛出一个 NameError 的错误,你可以捕捉这个错误。

不过如果你只是想处理 if __name__ == '__main__' 这个条件的“否则”情况,那为什么不直接这样做呢:

if __name__ == '__main__'
    myvar = 'as_main'
else:
    myvar = 'as_import'
18

在使用一个变量之前,如果它还没有被初始化,那就是错误的。一个未初始化的变量并不是 None;如果你去访问它,就会引发一个异常。

如果你愿意,可以捕捉这个异常:

>>> try:
...    foo = x
... except NameError:
...    x = 5
...    foo = 1

在一个类里,你可以给变量设置一个默认值为 None,然后检查这个值是否发生了变化(假设 None 对于这个变量来说不是一个有效的值):

class Foo(object):
    bar = None
    def foo(self):
        if self.bar is None:
            self.bar = 5
        return self.bar

撰写回答