如何检查Python中是否已经调用了对象?
我使用PyGTK创建了一个GUI 在某些情况下,我想向我的GUI添加更多的UI元素。 我是这样做的:如何检查Python中是否已经调用了对象?,python,object,pygtk,try-catch,instantiation,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
try:
self.main.addServer(self.factory.logingo)
except:
self.main = MainWindow(self.factory.loginfo)
当我的对象self.main(是我的gtk.Window对象)已经存在时,我想调用addServer。但如果它不存在,我想调用MainWindow,它会创建一个gtk.Window。
我的问题是,我的尝试永远不会成功,我总是以失败告终,并重新创建一个自我
如何做到这一点?提前谢谢
if not hasattr(self, 'main'):
self.main = MainWindow(self.factory.loginfo)
self.main.addServer(self.factory.logingo)
注意:try:。。。除非:…
没有任何特殊例外,除非您知道自己在做什么。因为这隐藏了可能(和意外)的例外情况。相反,例如写:
try:
...
except AttributeError:
...
或者任何预期和将要处理的内容,而不是AttributeError
(例如,KeyError
或indexer
或ImportError
或其他内容)
并在try块中编写尽可能少的代码,例如,您可以这样编写上述代码:
try:
self.main
except AttributeError:
self.main = MainWindow(self.factory.loginfo)
self.main.addServer(self.factory.logingo)
这与此相当(有趣的是,
hasattr
本身使用了一个try-except!),但在这里使用hasattr更简洁明了。我仍然遇到了与第一篇文章相同的问题。它总是认为Self.Maple不存在:-(因此,主窗口总是被称为代码中的逻辑),也许你应该自己解决它。