[英]can i raise exception from inside a function in the 'try:' block when client disconnects from the server?
我正在嘗試使用 python 套接字構建一個簡單的服務器-客戶端聊天室。
我有以下代碼:
def handle_connection(client):
while(1):
try:
message = receive_message()
broadcast(message["data"])
except: # for now i don't mind which exception
print("client disconnected")
def receive_message(client_socket):
try:
message_header = client_socket.recv(HEADER)
if len(message_header) == 0:
return False
message_length = int(message_header.decode("utf-8"))
message = client_socket.recv(message_length).decode("utf-8")
return {"header": message_header, "data": message}
except: # most likely will trigger when a client disconnects
return False
其中receive_message()
在其中調用client.recv(HEADER)
並在沒有消息時返回False
,或者在一切正常時返回{"header": msg_header, "data": msg}
。
我的問題是:如果client.recv()
receive_message()
內部失敗,它會引發異常並打印"client disconnected"
嗎?
我確實提出了以下我認為可行的解決方案:
我定義了一個名為handle_disconnection()
的 function 來處理上面代碼中的except
內容。
def handle_connection(client_socket):
while 1:
try:
message = receive_message()
if not message:
handle_disconnection(client_socket)
break
broadcast(message["data"])
except: # client disconnected
handle_disconnection(client_socket)
break
這是解決問題的有效和/或正確的編程方法嗎? 如果這種方法是錯誤的,我該如何正確處理?
如果client.recv()
將引發異常,您將在receive_message()
內部處理它,而handle_connection()
將不會收到異常。
我建議您確定要通過異常或 if-else 控制流程的情況。 我認為receive_message()
應該在出現連接問題時返回 message 值或拋出ConnectionError
。 如果套接字沒有消息,您可以返回None
或引發NoMessagesAvailableError
。
還有一條規則告訴您應該捕獲指定的異常,而不是所有異常。 當您離開 memory 時,您的代碼將打印client disconnected
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.