2013-03-30 172 views
7

問題Python的線程未處理的異常

  1. 什麼是異常的原因是什麼?

  2. client是否導致任何錯誤?

  3. 如果有可能,請說明其他錯誤。

背景

我創建一個Python GUI插槽服務器。當客戶端連接到我的服務器時,GUI窗口將打開(我仍在處理此問題)。但是,當客戶端不會連接,我得到一個錯誤:

Unhandled exception in thread started by <function clientthread at 0x10246c230> 

由於實際的腳本是相當長的,我有provided a pastebin link.

這裏是線程的代碼。 s是我的socket對象的名稱。

def clientthread(s): 

    #Sending message to connected client 
    #This only takes strings (words 
    s.send("Welcome to the server. Type something and hit enter\n") 

    #loop so that function does not terminate and the thread does not end 
    while True: 

     #Receiving from client 
     data = s.recv(1024) 
     if not data: 
      break 
     s.sendall(data) 
     print data 
    s.close() 

回溯

感謝您的建議Morten。這是回溯。

Socket Created 
Socket Bind Complete 
Socket now listening 
Connected 
Traceback (most recent call last): 
    File "/Users/BigKids/Desktop/Coding/Python 2/Sockets/Function/Server GUI Alpha Function.py", line 80, in clientthread 
    s.send("Welcome to the server. Type something and hit enter\n") 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 170, in _dummy 
    raise error(EBADF, 'Bad file descriptor') 
error: [Errno 9] Bad file descriptor 

就個人而言,我相信很多錯誤是由於GUI。

謝謝!

+0

你的代碼對我來說很好。什麼導致異常? – Igonato

+0

@Igonato可能是客戶斷開連接,你不覺得嗎?這通常會引發例外IIRC –

+0

@MortenJensen我添加了我的客戶端。我會在15分鐘內回來查看 - 我必須去和erg :) – xxmbabanexx

回答

2

其一,你可以捕獲該異常,打印出來,看看它是什麼:)

用一個try /周圍以外的所有條款和任何異常發生時打印做到這一點,例如。

def clientthread(s): 
    try: 
     #Sending message to connected client 
     #This only takes strings (words 
     s.send("Welcome to the server. Type something and hit enter\n") 

     #loop so that function does not terminate and the thread does not end 
     while True: 

      #Receiving from client 
      data = s.recv(1024) 
      if not data: 
       break 
      s.sendall(data) 
      print data 
     s.close() 
    except Exception: 
     import traceback 
     print traceback.format_exc() 

我猜這是客戶端斷開的原因。這會導致一個異常,你應該適當地處理它。如果客戶可以通過多種方式斷開連接。通過超時告知您,在嘗試發送內容等時斷開連接。 所有這些情況都是可信的異常情況,您應該測試它們並處理它們。希望這會幫助你繼續前進,如果沒有,請評論:)