Python处理特定的错误代码?

时间:2011-03-01 22:25:39

标签: python sockets exception exception-handling

嘿,我想知道如何处理特定的错误代码。例如,[Errno 111] Connection refused

我想在套接字模块中捕获此特定错误并打印一些内容。

4 个答案:

答案 0 :(得分:35)

如果你想获得错误代码,这似乎可以解决问题;

import errno

try:
    socket_connection()
except socket.error as error:
    if error.errno == errno.ECONNREFUSED:
        print(os.strerror(error.errno))
    else:
        raise

您可以查看errno error codes

答案 1 :(得分:27)

在Unix平台上,至少可以执行以下操作。

import socket, errno
try:
    # Do something...
except socket.error as e:
    if e.errno == errno.ECONNREFUSED:
        # Handle the exception...
    else:
        raise

在Python 2.6之前,使用e.args[ 0 ]代替e.errno

答案 2 :(得分:0)

我在Windows上开发并发现自己陷入了同样的困境。但错误消息始终包含错误号。使用该信息我只是将异常转换为字符串str(Exception),将我想检查的错误代码转换为字符串str(socket.errno.ERRORX)并检查错误代码是否在异常中。

连接重置例外的示例:

except Exception as errorMessage:
    if str(socket.errno.ECONNRESET) in str(errorMessage):
        print("Connection reset")
        #etc...

这避免了特定于语言环境的解决方案,但遗憾的是它仍然不是平台独立的。

答案 3 :(得分:-1)

这似乎难以可靠/可移植但可能类似于:

import socket

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('localhost', 4167))
except socket.error, e:
    if 'Connection refused' in e:
        print '*** Connection refused ***'

产生:

$ python socketexception.py 
*** Connection refused ***

虽然很讨厌。