diff --git a/src-python/models/osc/osc.py b/src-python/models/osc/osc.py index ef4e1152..a47f1f8d 100644 --- a/src-python/models/osc/osc.py +++ b/src-python/models/osc/osc.py @@ -90,8 +90,10 @@ class OSCHandler: # エラー発生時にbrowserをリセットして次回再初期化 if self.browser is not None: try: - self.browser.zc.close() - self.browser.browser.cancel() + if hasattr(self.browser, 'zc') and self.browser.zc is not None: + self.browser.zc.close() + if hasattr(self.browser, 'browser') and self.browser.browser is not None: + self.browser.browser.cancel() except Exception: pass self.browser = None @@ -140,8 +142,10 @@ class OSCHandler: # browserがある場合はクリーンアップ if self.browser is not None: try: - self.browser.zc.close() - self.browser.browser.cancel() + if hasattr(self.browser, 'zc') and self.browser.zc is not None: + self.browser.zc.close() + if hasattr(self.browser, 'browser') and self.browser.browser is not None: + self.browser.browser.cancel() except Exception: pass self.browser = None diff --git a/src-python/models/websocket/websocket_server.py b/src-python/models/websocket/websocket_server.py index 34762e55..299e7032 100644 --- a/src-python/models/websocket/websocket_server.py +++ b/src-python/models/websocket/websocket_server.py @@ -138,7 +138,8 @@ class WebSocketServer: finally: # 停止指示が出たらすべての接続を閉じ、イベントループを終了 self._loop.run_until_complete(self._shutdown()) - self._loop.close() + if self._loop is not None: + self._loop.close() async def _shutdown(self): """ diff --git a/src-python/utils.py b/src-python/utils.py index 7bc0997b..2676d591 100644 --- a/src-python/utils.py +++ b/src-python/utils.py @@ -115,9 +115,24 @@ def printResponse(status:int, endpoint:str, result:Any=None) -> None: "endpoint": endpoint, "result": result, } - process_logger.info(response) - response = json.dumps(response) - print(response, flush=True) + process_logger.info(response) # Log the unserialized response + + try: + serialized_response = json.dumps(response) + except OSError as e: + errorLogging() # Log the full traceback of the OSError + process_logger.error(f"Problematic response object before json.dumps: {response}") + process_logger.error(f"OSError during json.dumps: {e}") + # Optionally, print a generic error JSON to stdout if needed, or re-raise + # For now, we'll print a simple error message to stdout as a fallback + error_json = json.dumps({ + "status": 500, + "endpoint": endpoint, + "result": {"error": "Failed to serialize response due to OSError", "details": str(e)} + }) + print(error_json, flush=True) + else: + print(serialized_response, flush=True) error_logger = None def errorLogging() -> None: