目前,我遇到NameError
以下代码的问题:
try:
# some network programming raising an exception
except ConnectionError:
# some error handling
这不起作用,因为您必须ConnectionError
从文档中未提及的某个模块导入(也许我只是盲目?)。我发现的只是this,但它引用了另一个请求库。
目前,我遇到NameError
以下代码的问题:
try:
# some network programming raising an exception
except ConnectionError:
# some error handling
这不起作用,因为您必须ConnectionError
从文档中未提及的某个模块导入(也许我只是盲目?)。我发现的只是this,但它引用了另一个请求库。
标准库中预期“通常可用”的所有异常都是内置的,并记录在库参考的内置异常部分中。
在 3.3 中,这包括:
例外
ConnectionError
连接相关问题的基类。
子类是
BrokenPipeError
、ConnectionAbortedError
和。ConnectionRefusedError
ConnectionResetError
但这是一个内置的。所以这应该工作:
except ConnectionError:
在 3.0-3.2 中,没有ConnectionError
. 标准库中的任何内容都不会引发该名称的任何内容。因此,试图处理它是没有意义的。(有关在 3.2 和 3.3 之间如何重组和重组的解释,请参见PEP 3151。 )OSError
IOError
3.2 的等价物ConnectionError
是OSError
具有某些errno
值的。所以,你想要的是这样的:
except OSError as e:
if e.errno not in (EPIPE, ESHUTDOWN, ECONNABORTED, ECONNREFUSED, ECONNRESET):
raise
# whatever you wanted to do for ConnectionError.
同时,在未来,当你不知道你需要处理什么样的异常时,测试起来也很容易。首先,编写一些测试代码,通过记录异常类型的限定名称来处理任何异常。然后从日志中取出类型并在您的真实代码中使用它。
try:
code_that_raises()
except Exception as e:
print(type(e), type(e).__qualname__, whatever_else_looks_useful(e))