理解Python中的错误代码及其有意义的错误名称
我了解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
如果socket出现超时错误,这个错误会被捕获。那么如果我想找一个连接被拒绝的错误呢?我知道这个错误的编号是10061。请问在文档中我应该去哪里找一个像“超时”这样的有意义的名称?对于其他Python模块,也有类似的地方可以查找吗?我知道这个问题有点基础,但我在我的代码中添加错误处理已经有一段时间了,却不知道去哪里找错误的描述和名称。
编辑:
感谢大家的回复。
那么
except socket.error, exception:
if exception.errno == ETIMEDOUT:
pass
会和
except socket.timeout:
pass
达到相同的效果吗?
3 个回答
2
你会遇到一个错误,错误代码会用一个叫errno的编号表示,具体的说明可以在errno的文档里找到。错误代码10061只适用于WinSock这个网络库。
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
使用:
def manage_connection_refused():
print "Connection refused"
def manage_host_down():
print "Host down"
def default_behaviour():
print "error"