2012-08-10 93 views
0

我正在製作一個需要連接互聯網的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應該也工作。 那麼任何提示球員?

+1

通常認爲不好的做法是使用一個空的'except:'而不是你應該除了一個特定的異常或類的異常,'除了IOError:' – 2012-08-10 19:44:01

回答

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() 
0

退出通過調用wx.GetApp().Exit()的wx.App事件循環。

+0

我一定會嘗試一下。 – 2012-08-23 07:23:49