因此,假设您有一个带变量的应用程序,您将在独立加载它时创建一个实例(即当您使用if __name__ == '__main__'
时)。
此外,还有一种方法可在客户端导入应用程序以在另一个应用程序中使用时调用。此方法还将实例化此变量。
我想要做的是测试变量是否在定义之前已经被实例化(因此我不必经历两次对象的创建)。我的直觉告诉我使用if SOME_VARIABLE is not None: #instantiate here
,但这会产生错误
局部变量'SOME_VARIABLE' 在分配前引用
是什么给出了?
答案 0 :(得分:14)
在初始化变量之前访问变量是错误的。未初始化变量的值不是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
答案 1 :(得分:3)
您可以尝试if 'varname' in locals()
(您可能还需要检查globals()
,也许还有其他一些地方),或者只是从变量中读取并捕获将被抛出的NameError
异常当它不存在时。
但如果您只想要if __name__ == '__main__'
的其他情况,为什么不这样做:
if __name__ == '__main__'
myvar = 'as_main'
else:
myvar = 'as_import'