MST

星途 面试题库

面试题:Python网络编程中常见的错误类型及处理方式

在Python网络编程中,通常会遇到哪些类型的错误,比如连接错误、超时错误等,请分别阐述针对这些常见错误,应该如何使用Python的错误处理机制进行处理,并举例说明。
42.7万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

连接错误(ConnectionError 及其子类)

  1. 常见类型
    • ConnectionRefusedError:当尝试连接到一个拒绝连接的服务器时会引发,例如服务器未在指定端口监听。
    • ConnectionAbortedError:连接被对等方中止时引发,可能因为服务器端突然关闭连接。
    • ConnectionResetError:连接被对等方重置时引发,比如服务器端强制关闭连接。
  2. 处理方式:使用 try - except 语句捕获 ConnectionError 及其子类。
import socket

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('127.0.0.1', 9999))
except ConnectionRefusedError:
    print("连接被拒绝,可能服务器未启动或端口未监听")
except ConnectionAbortedError:
    print("连接被对等方中止")
except ConnectionResetError:
    print("连接被对等方重置")
finally:
    s.close()

超时错误(TimeoutError

  1. 常见场景:在设置了连接或操作超时时间后,若操作在规定时间内未完成,就会引发此错误。例如在 socket 连接或读取数据时设置了超时。
  2. 处理方式:同样使用 try - except 捕获 TimeoutError
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)  # 设置超时时间为5秒
try:
    s.connect(('127.0.0.1', 9999))
    data = s.recv(1024)
except TimeoutError:
    print("操作超时")
finally:
    s.close()

地址错误(gaierror,源于 getaddrinfo 函数错误)

  1. 常见类型
    • 当主机名无法解析为IP地址时会引发,比如输入了错误的主机名。
  2. 处理方式:捕获 socket.gaierror
import socket

try:
    addr_info = socket.getaddrinfo('nonexistenthost.com', 80)
except socket.gaierror as e:
    print(f"地址解析错误: {e}")

协议错误(ProtocolError,特定网络协议相关错误,如HTTP协议中状态码异常等,以http.client为例)

  1. 常见场景:在使用HTTP协议时,如果服务器返回的状态码表示错误(如404、500等),可以认为是协议错误。
  2. 处理方式:在http.client模块中,捕获http.client.HTTPExceptionProtocolError的父类)。
import http.client

try:
    conn = http.client.HTTPConnection('example.com')
    conn.request('GET', '/nonexistentpage')
    res = conn.getresponse()
    if res.status >= 400:
        raise http.client.HTTPException(f"HTTP错误: {res.status} {res.reason}")
except http.client.HTTPException as e:
    print(f"协议错误: {e}")
finally:
    conn.close()