【发布时间】:2020-05-12 12:35:43
【问题描述】:
我正在为 Python 3.8 中的 TCP 服务器编写测试脚本。
脚本运行良好,但现在我正在尝试实现更有效的错误捕获以识别超时错误。
为此,我开始捕获套接字连接的错误和超时错误。
这是我的 SocketConnect 函数:
def SocketConnect( host, port ):
global socketHandle
opResult = errorMessagesToCodes['No Error']
# Set Socket Timeout
socketHandle.settimeout(1)
logging.debug("Connect")
try:
socketHandle.connect((host, port))
except socketHandle.error as e:
opResult = errorMessagesToCodes['Socket Error']
logging.error("!!! Socket Connect FAILED: %s" % e)
return opResult
套接字处理程序有效,为了测试超时,我禁用了服务器。
连接后一秒钟后,代码转到 except 但我收到此错误:
socket.connect((主机,端口))
socket.timeout:超时
在处理上述异常的过程中,又发生了一个异常:
除了 socket.error as e: AttributeError: 'socket' 对象没有属性 'error'
有什么遗漏吗?
因为我不明白为什么套接字对象没有属性错误。我认为这是套接字接口的标准错误。
提前感谢您的帮助。
更新: 我试图做一个基本的测试(从一个空白项目开始):只有一个套接字创建和一个套接字连接(服务器不处于监听模式)来模拟超时。
这是代码:
import socket
import logging
try:
socketHandle = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socketHandle.error as e:
logging.error("Socket Create FAILED: %s" % e)
socketHandle.settimeout(1)
try:
socketHandle.connect(('localhost', 2000))
except socketHandle.error as e:
logging.error("!!! Socket Connect FAILED: %s" % e)
连接超时,但我仍然收到错误:
除了 socketHandle.error as e: AttributeError: 'socket' 对象没有属性 'error'
我真的不知道发生了什么。
更新 2:
我做了一些其他测试,如果我在 connect 函数中使用 try-catch,我会收到错误,但如果我在 main 中使用 try-catch,则不会出现任何错误。
最好的问候, 费德里科
【问题讨论】: