Python:except EOFError:... 无效

0 投票
2 回答
9021 浏览
提问于 2025-04-16 13:31

我有一个尝试/异常处理的代码块,它会发送一条消息并等待客户端的确认。如果客户端中断了连接,pickle会抛出一个EOFError错误,但下面的代码没有捕捉到这个错误,也没有执行优雅的关闭操作,而是打印了错误的堆栈信息。我猜这和这一行“except socket.error, EOFError:”有关——我是不是用错了语法,导致无法同时处理socket.error和EOFError这两个错误?

        try:
            msgs = [1]
            self.sock.send(pickle.dumps(msgs))
            rdy = pickle.loads(self.sock.recv(2097152))
        except socket.error, EOFError: 
            print 'log socketmanager closing'
            self.terminate()
            break

2 个回答

0

break 这个命令导致了错误,它只能在 for 循环或者 try/finally 块里面使用,而不能在 try/except 块中使用。你可以查看 这个文档更多信息

2

在Python 2.x中,写法except a, b的意思是捕捉类型为a的异常,并把它赋值给一个叫b的变量。在你的例子中,这样做会导致EOFError被忽略。你可以试试下面这种写法:

...
except (socket.error, EOFError):
    ...

补充一下,在Python 3.0中,捕捉异常值的新写法是except a as b,而在2.6及以上版本中也可以使用这种写法,不过不是强制的。

撰写回答