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)
要实现您想要的,您必须获取引发的异常,提取存储的错误代码,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)
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |