我了解 python 错误处理的基本 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。我应该在文档中的什么地方找到一个有意义的全名,例如超时。是否有类似的地方可以寻找其他 python 模块?我知道这是一个新手问题,但一段时间以来我一直在错误处理我的代码,但实际上并不知道在哪里寻找错误描述和名称。
编辑:
感谢您的所有回复。
会
except socket.error, exception:
if exception.errno == ETIMEDOUT:
pass
达到与
相同的结果except socket.timeout:
pass
最佳答案
要实现您想要的效果,您必须获取引发的异常,提取存储在其中的错误代码,并对 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
与:
def manage_connection_refused():
print "Connection refused"
def manage_host_down():
print "Host down"
def default_behaviour():
print "error"
关于python - 了解 Python 中的错误代码并使用有意义的错误名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8270510/