检查连接,如果没有可用连接则退出

时间:2012-08-10 19:32:48

标签: python wxpython

我正在制作一个需要互联网连接的wxpython应用程序。所以,我需要检查是否存在连接,如果没有,则退出。所以我的代码看起来像这样。

class Example(wx.Frame):

    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title=title, 
            size=(700,650))
        self.InitUI()
        self.Centre()

#*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.
#--------------------------------------------------------------------------------

        favicon = wx.Icon(ICON_PATH, wx.BITMAP_TYPE_ICO)
        wx.Frame.SetIcon(self, favicon)
        self.Show()     

    def InitUI(self):
        #checkConnection()
        checkInstances()

        panel = wx.Panel(self)

        font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
        font.SetPointSize(9)

        font1 = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
        font1.SetPointSize(10)

#Layout 

        vbox = wx.BoxSizer(wx.VERTICAL)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        st1 = wx.StaticText(panel, label='Select Slot :')
        st1.SetFont(font1)
        hbox1.Add(st1, flag=wx.ALL, border=8)

        try:
            handler = urllib.urlopen("http://%s/api/get-slots/?api_key=%s"%(BASE_DOMAIN, API_KEY))
        except:

            wx.MessageBox("Error communicating with the server.", 'WARNING',wx.OK |wx.ICON_INFORMATION)
            handler = None
            sys.exit(0)

所以我想检查上面的链接(某个链接),如果失败,我会显示一个消息框,然后我退出。当我运行这个(关闭互联网)时,应用程序会显示该消息,然后在单击“确定”后,将打开另一个带有打印的回溯框

SystemExit:0

它实际上并没有退出。尝试使用self.Close也。那也行不通。 考虑在我们运行应用程序后立即执行checkconnection功能。

def checkConnection():

    try:
        test = urllib.urlopen("http://www.google.com")
    except:
        sys.exit(0)

放在

 def InitUI(self):
        checkConnection()
        .........
        .........

这也做了同样的事情。那么是否有一些方法可以避免打印 并且实际退出?

os._exit工作但我只是认为sys.exit也应该有效。 那么有什么提示吗?

2 个答案:

答案 0 :(得分:1)

而不是sys.exit(或os._exit)使用

self.Destroy()

os._exit突然停止进程而不调用任何清理处理程序,通常不应该使用(halt child processes after a fork除外)。

sys.exit引发SystemExit异常。 wxpython必须捕获此异常并选择在不退出应用程序的情况下打印错误消息。

self.Destroy()应该退出该应用。


try:
    test = urllib.urlopen("http://www.google.com")
except IOError:
    wx.MessageBox("Error communicating with the server.")
    self.Destroy()

答案 1 :(得分:0)

通过调用wx.GetApp().Exit()退出wx.App事件循环。