为什么 break 不会跳出 except 子句中的 while 循环
Why break wouldn't break out of whileloop in except clause
所以我正在为一个简单的套接字编写代码
while True:
print('here')
connectionSocket, addr = serverSocket.accept()
while True:
print('inside')
try:
sentence = connectionSocket.recv(1024).decode()
except EOFError:
connectionSocket.close()
break
想法是,一旦客户端发送 EOF,连接套接字就会关闭,我们就会跳出 while 循环,等待下一个客户端连接。我不明白的是,当我尝试 运行 并向服务器发送 EOF 时,服务器端开始永远循环并打印“内部”。没有打印“这里”,所以我确定我从未跳出内部 for 循环。这是为什么?忽略我可能做错的所有其他事情,为什么“break”没有跳出 while 循环?谢谢
我不确定你为什么不跳出循环,但是——假设错误真的发生了——你可以直接跳出循环,但有例外:
while True:
print('here')
connectionSocket, addr = serverSocket.accept()
try:
while True:
print('inside')
sentence = connectionSocket.recv(1024).decode()
except EOFError:
connectionSocket.close()
阅读有关在 Python 中使用套接字的页面
https://docs.python.org/3/howto/sockets.html#using-a-socket
socket.recv
的 API 不会引发 EOFError。相反,您应该检查是否有空响应。
sentence = connectionSocket.recv(1024).decode()
if sentence == '':
break
请注意,recv
也不能保证一次接收所有数据,因此您通常希望循环并缓冲传入数据。一旦另一端关闭连接(或连接丢失),它只会 return 一个空字符串,因此请确保发送方正在关闭套接字(或以其他方式标记数据结束)。
所以我正在为一个简单的套接字编写代码
while True:
print('here')
connectionSocket, addr = serverSocket.accept()
while True:
print('inside')
try:
sentence = connectionSocket.recv(1024).decode()
except EOFError:
connectionSocket.close()
break
想法是,一旦客户端发送 EOF,连接套接字就会关闭,我们就会跳出 while 循环,等待下一个客户端连接。我不明白的是,当我尝试 运行 并向服务器发送 EOF 时,服务器端开始永远循环并打印“内部”。没有打印“这里”,所以我确定我从未跳出内部 for 循环。这是为什么?忽略我可能做错的所有其他事情,为什么“break”没有跳出 while 循环?谢谢
我不确定你为什么不跳出循环,但是——假设错误真的发生了——你可以直接跳出循环,但有例外:
while True:
print('here')
connectionSocket, addr = serverSocket.accept()
try:
while True:
print('inside')
sentence = connectionSocket.recv(1024).decode()
except EOFError:
connectionSocket.close()
阅读有关在 Python 中使用套接字的页面 https://docs.python.org/3/howto/sockets.html#using-a-socket
socket.recv
的 API 不会引发 EOFError。相反,您应该检查是否有空响应。
sentence = connectionSocket.recv(1024).decode()
if sentence == '':
break
请注意,recv
也不能保证一次接收所有数据,因此您通常希望循环并缓冲传入数据。一旦另一端关闭连接(或连接丢失),它只会 return 一个空字符串,因此请确保发送方正在关闭套接字(或以其他方式标记数据结束)。