Python中的所有HttpError都是IOError的子类吗

2 投票
1 回答
1104 浏览
提问于 2025-04-15 15:47

在我们的代码中,我们会捕捉到IOError这个错误,并在重新抛出之前记录一下它。我遇到了一个“连接被对方重置”的错误,但日志里没有任何记录。请问“连接被对方重置”这个错误在Python中是IOError的一个子类吗?

     .....
  File "/usr/lib/python2.5/httplib.py", line 1047, in readline
    s = self._read()
  File "/usr/lib/python2.5/httplib.py", line 1003, in _read
    buf = self._ssl.read(self._bufsize)
error: (104, 'Connection reset by peer')

1 个回答

2

你粘贴的错误信息看起来像是一个 error 类的异常,参数是 (104, 'Connection reset by peer')

所以这看起来根本不是一个 HTTPError 异常。对我来说,这实际上是一个 socket.error。这个类从 Python 2.6 开始确实是 IOError 的一个子类。

不过我想这不是你想问的问题,因为你在问关于 HttpError 异常的事。你能重新表述一下你的问题,说明一下你的假设和期望吗?

usawaretech 的评论:

你是怎么判断这是一个 socket 错误的?我的代码大概是这样的:
try:risky_code(); except IOError:
logger.debug('...'); raise; 我假设 HttpError 是 IOError 的一个子类,当我遇到这个异常时,我以为它会被记录下来。但我的日志里什么都没有。

我猜这是一个 socket.error,因为我查了 标准库文档的索引,而且我之前遇到过这个错误。

你用的是什么版本的 Python?我猜是 Python 2.5 或更早的版本。

如果你的目的是记录并重新抛出异常,使用一个简单的 except 会更好:

try:
    risky_code()
except:
    logger.debug(...)
    raise

另外,你可以通过 exception.__module__ 找到定义这个异常类的模块。

撰写回答