2011-11-28 5 views
4

아래 코드는 실행중인 Python 스크립팅 된 Windows 서비스의 오류 추적 코드입니다. 그것은 Windows XP에서 파이썬 2.7에서 잘 작동하는 것 같지만 사용중인 생산 기계는 Windows 서버 2003에서 파이썬 2.5를 실행합니다. 가지고있는 주요 오류는 'error' object has no attribute 'errno' 파이썬 2.5에 대해 근본적으로 잘못된 작업을하고 있습니까?파이썬 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 

오류 추적 싹둑는 : 파이썬 2.6에서explained here으로

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

답변

5

는 :

버전 2.6에서 변경 : socket.error를 이제 IOError의 하위 클래스입니다.

이고 IOError의 하위 클래스는 errno입니다.

파이썬 < 2.6 (그리고 그 길을 described here이 socket.error을 제기 유효 가정) 당신이 예외의 args 속성에서 그것을 얻을해야합니다 귀하의 오류와 관련된 errno를 얻을하려는 경우 :

except socket.error, socket_error: 
    if socket_error.args[0] == errno.ECONNREFUSED: 
충분히 공정
+0

,하지만 난 제대로 연결 – Richard

+0

@ 리차드을 거부 붙잡는 방법 : 연결이 지금 작업 –

+0

감사를 처리 거부 내 (편집) 대답의 두 번째 부분을 참조하십시오. – Richard