如果变量不存在,如何检查实例是否存在?

时间:2015-02-20 08:38:11

标签: python maya mel

我有一个用类导入模块的按钮。 类(varClass)创建一个窗口。

如果我再次点击按钮,我试试这个:

if var:
    var.toggleUI()
else :
    var = varClass()

但var并没有'在打开Maya后第一次创建窗口时存在。我怎样才能使这个工作?

5 个答案:

答案 0 :(得分:4)

您可以捕获NameError例外:

try:
    var.toggleUI()
except NameError:
    var = varClass()

如果您还需要第一次拨打toggleUI,请尝试使用名称:

try:
    var
except NameError:
    var = varClass()

var.toggleUI()

我不熟悉Maja,但如果您可以先在其他位置定义名称,只需将其设置为None,那么您的代码也可以正常工作,如果不是更好的话。

答案 1 :(得分:4)

使用例外:

try:
    var.toggleUI()
except NameError:
    var = varClass()
    var.toggleUI()

答案 2 :(得分:0)

如果您在按钮内执行此操作,则应将var的管理权限卸载到您要导入的模块中。让模块处理实例化,按钮让模块完成繁重的工作。只要进口没有副作用(如果你正确地做对话就不应该有副作用),Rendundant进口不会受到伤害。

模块做了这样的事情:

class SampleGui(object):
     # all sorts of good stuff here

_sample_gui_instance = None
def get_instance():
    _sample_gui_instance = sample_gui_instance or SampleGui()
    return _sample_gui_instance 

按钮就是

import SampleGuiModule
SampleGuiModule.get_instance().toggleUI()

这与其他人的答案相同,但我认为通过将实例管理委派给模块,而不是按钮,您可以进行任何级别的复杂性或初始化并分享在透明按钮,热键或其他脚本之间。

我使用or代替if... is None保存了一些字符;由于某些原因,SampleGui真值测试为假,这将是棘手的。但只有你强迫它才会这样做。

可能有用:maya callbacks cheat sheet

答案 3 :(得分:0)

您可以使用dir函数

a=5
'a' in dir()
'b' in dir()

这将打印

True
False

所以在你的情况下

if 'var' in dir():
    var.toggleUI()
else :
    var = varClass()

答案 4 :(得分:-3)

默认您的var,并将其用作测试:

var = None
if var is None:
  var = varClass()
var.toggleUI()