【问题标题】:Python: except EOFError: ... doesn't workPython:除了EOFError:...不起作用
【发布时间】:2011-03-11 19:11:56
【问题描述】:

我有一个 try/except 块,它发送一条消息并等待来自客户端的确认。如果客户端终止,pickle 会引发 EOFError,但下面的代码不会捕获错误并执行正常关闭。它改为打印堆栈跟踪。我认为它与“除了 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

【问题讨论】:

    标签: python exception-handling eoferror


    【解决方案1】:

    在 Python 2.x 中,except a, b 表单捕获 a 类型的异常并将其分配给名为 b 的变量。在您的情况下,这将导致 EOFError 被忽略。试试这个:

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

    编辑:详细说明,Python 3.0 中的新语法,在 2.6+ 中可用但不是必需的,用于捕获异常的值是except a as b

    【讨论】:

    • 这对 python 来说太不直观了,感谢您提供的信息。
    【解决方案2】:

    break 导致错误,它只能在for 循环或try/finally 块内使用,而不是try/except,请参阅docsmore

    【讨论】:

    • 事实上,整个块都在一个循环中,我应该包括那个位。
    猜你喜欢
    • 2015-03-13
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多