套接字错误处理在python 2.5中是否与2.7不同?

时间:2011-11-28 13:22:48

标签: python error-handling

下面是一个代码片段,其中包含我正在运行的python脚本化Windows服务的错误跟踪。它似乎在Windows XP上的python 2.7中正常工作,但我使用的生产机器在Windows Server 2003上运行python 2.5。我遇到的主要错误是'error' object has no attribute 'errno'我做的是python 2.5的根本错误适用于2.7?

Code Snip:

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

1 个答案:

答案 0 :(得分:5)

作为explained here,在python 2.6中:

  

在2.6版中更改:socket.error现在是IOError的子类。

并且IOError的子类具有errno成员。

如果你想在python<中获得与你的错误相关的errno; 2.6,(并假设described here对提出socket.error的方式有效),你必须从异常的args属性中获取它:

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