我理解pythons错误处理的基本try:
except:
finally:
语法。我不明白的是如何找到合适的错误名称来制作可读代码。
例如:
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
因此,如果套接字引发超时,则会捕获错误。如果我正在寻找连接被拒绝怎么样?我知道错误号是10061.我在文档中的哪个位置找到一个含义的全名,例如timeout。是否有类似的地方寻找其他python模块?我知道这是一个新手问题,但我一直在错误处理我的代码一段时间,而实际上并不知道在哪里查找错误描述和名称。
编辑:
感谢您的所有回复。
会
except socket.error, exception:
if exception.errno == ETIMEDOUT:
pass
获得与
相同的结果except socket.timeout:
pass
答案 0 :(得分:5)
要实现您想要的效果,您必须获取引发的异常,提取存储的错误代码,并对errno codes进行一些if
比较:
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
with:
def manage_connection_refused():
print "Connection refused"
def manage_host_down():
print "Host down"
def default_behaviour():
print "error"
答案 1 :(得分:2)
您将收到errno的错误,errno文档中对此进行了描述。 10061仅对WinSock有效。
答案 2 :(得分:0)