Skip to main content
 首页 » 编程设计

python之如何在 Python 中处理 ConnectionError

2025年05月04日8小虾米

目前我遇到以下代码的NameError 问题:

try: 
    # some network programming raising an exception 
except ConnectionError: 
    # some error handling 

这是行不通的,因为您必须从某个模块中导入 ConnectionError,这在文档中没有提及(也许我只是瞎了眼?)。 我只找到了 this , 但它指的是另一个请求库。

请您参考如下方法:

标准库中预期“普遍可用”的所有异常都是内置的,并记录在 Built-in Exceptions 中图书馆引用的一部分。

在 3.3 中,包括这个:

exception ConnectionError

A base class for connection-related issues.

Subclasses are BrokenPipeError, ConnectionAbortedError, ConnectionRefusedError and ConnectionResetError.

但这是内置的。所以这应该有效:

except ConnectionError: 

在 3.0-3.2 中,是没有ConnectionError这样的异常。 stdlib 中没有任何内容引发该名称的任何内容。因此,尝试处理它是没有意义的。 (有关如何在 3.2 和 3.3 之间重组 OSError 和 IOError 的说明,请参阅 PEP 3151。)

ConnectionError 的 3.2 等效项是具有特定 errno 值的 OSError。所以,你想要的是这样的:

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))