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

Ric*_*ard 4 python error-handling

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

代码剪辑:

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
Run Code Online (Sandbox Code Playgroud)

错误跟踪剪辑:

if socket_error.errno == errno.ECONNREFUSED:
AttributeError: 'error' object has no attribute 'errno' 
%2: %3
Run Code Online (Sandbox Code Playgroud)

Céd*_*ien 5

正如这里解释的,在python 2.6中:

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

IOError的子类有一个errno成员.

如果你想在python <2.6中获得与你的错误相关的errno,(并且假设这里描述的方式对于引发socket.error有效)你必须从args异常的属性中获取它:

except socket.error, socket_error:
    if socket_error.args[0] == errno.ECONNREFUSED:
Run Code Online (Sandbox Code Playgroud)