了解Python中的错误代码并使用有意义的错误名称

Ric*_*ard 5 python error-handling

我理解try: except: finally:pythons错误处理的基本语法.我不明白的是如何找到正确的错误名称来制作可读代码.

例如:

try:
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     s.connect((HOST, PORT))
     s.settimeout(60)               
     char = s.recv(1)

except socket.timeout:
    pass
Run Code Online (Sandbox Code Playgroud)

因此,如果套接字引发超时,则会捕获错误.如果我正在寻找连接被拒绝怎么样?我知道错误号是10061.我在文档中的哪个位置找到一个含义的全名,例如timeout.是否有类似的地方寻找其他python模块?我知道这是一个新手问题,但我一直在错误处理我的代码一段时间,而实际上并不知道在哪里查找错误描述和名称.

编辑:

感谢您的所有回复.

except socket.error, exception:
    if exception.errno == ETIMEDOUT:
         pass
Run Code Online (Sandbox Code Playgroud)

达到同样的效果

except socket.timeout:
    pass
Run Code Online (Sandbox Code Playgroud)

Céd*_*ien 5

要实现您想要的,您必须获取引发的异常,提取存储的错误代码,if并对errno代码进行一些比较:

try:
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     s.connect((HOST, PORT))
     s.settimeout(60)               
     char = s.recv(1)
except socket.error, exception:
    if exception.errno == errno.ECONNREFUSED:
        # this is a connection refused
    # or in a more pythonic way to handle many errors:
    {
       errno.ECONNREFUSED : manage_connection_refused,
       errno.EHOSTDOWN : manage_host_down,
       #all the errors you want to catch
    }.get(exception.errno, default_behaviour)()
except socket.timeout:
    pass
Run Code Online (Sandbox Code Playgroud)

用:

def manage_connection_refused():
   print "Connection refused"

def manage_host_down():
   print "Host down"

def default_behaviour():
   print "error"
Run Code Online (Sandbox Code Playgroud)