如何检查Python中是否已调用对象?

时间:2011-05-09 10:46:18

标签: python object pygtk try-catch instantiation

我使用PyGTK创建了一个GUI。

我想在某些情况下为我的GUI添加更多UI元素。 我做了类似的事情:

try:
    self.main.addServer(self.factory.logingo)
except:
    self.main = MainWindow(self.factory.loginfo)

当我的对象self.main(我的gtk.Window对象)已经存在时,我想调用addServer。但如果它不存在,我想调用MainWindow创建一个gtk.Window。 我的问题是,我的尝试永远不会成功,我总是在除外,并重新创建一个self.main。

怎么做?提前谢谢。

1 个答案:

答案 0 :(得分:0)

if not hasattr(self, 'main'):
    self.main = MainWindow(self.factory.loginfo)
self.main.addServer(self.factory.logingo)

PS:除非您知道自己在做什么,否则请try: ... except: ...没有任何具体的例外情况。因为这隐藏了可能的(和意外的)异常。相反,例如写:

try:
    ...
except AttributeError:
   ...

或任何预期且将被处理的内容,而不是AttributeError(例如,KeyErrorIndexErrorImportError或其他内容) 并在try块中尽可能少地编写代码,例如,您可以编写如下代码:

try:
    self.main
except AttributeError:
    self.main = MainWindow(self.factory.loginfo)
self.main.addServer(self.factory.logingo)

这相当于那个(有趣的是,hasattr本身使用了一个尝试,除了!),但是使用hasattr在这里更清洁,更短。

相关问题