2011-11-28 45 views
4

下面是我正在運行的一個python腳本windows服務的錯誤跟蹤代碼片段。它似乎可以在Windows XP的python 2.7中正常工作,但是我正在使用的生產機器在Windows Server 2003上運行python 2.5。我遇到的主要錯誤是'error' object has no attribute 'errno'我正在做一些根本上錯誤的Python 2.7 for 2.7?python 2.5中的套接字錯誤處理與2.7不同嗎?

代碼剪斷:

try: 
    if s == None: 
      s = self.connect() 
    char = s.recv(1) 
    line += char 

except socket.timeout: 
    if s != None: 
     s.close() 
    s = None 
    continue 

except socket.error, socket_error: 
    servicemanager.LogErrorMsg(traceback.format_exc()) 

    if socket_error.errno == errno.ECONNREFUSED: 
     if s != None: 
      s.close() 
     time.sleep(60) 

     s =None      
     continue 

    else: 
     if s != None: 
      s.close() 
     os._exit(-1) 

else: 
    pass 

錯誤跟蹤剪斷:

if socket_error.errno == errno.ECONNREFUSED: 
AttributeError: 'error' object has no attribute 'errno' 
%2: %3 

回答

5

正如explained here,在Python 2.6:

改變在2.6版本:socket.error現在是IOError的子類。

和IOError的子類有一個errno成員。

如果你想在Python 2.6 <,(並假設的方式described here有效期爲提高socket.error),你必須從你的異常的args屬性得到它關係到你的錯誤的錯誤號:

except socket.error, socket_error: 
    if socket_error.args[0] == errno.ECONNREFUSED: 
+0

不夠公平,但我怎麼適當地捕捉連接被拒絕 – Richard

+0

@Richard:看我(編輯)回答的第二部分的連接被拒絕處理 –

+0

感謝,其現在的工作。 – Richard