如何在Python中仅针对PermissionDenied异常记录日志并处理所有错误?
解决方案
你可以通过分层捕获异常或者在通用异常块内判断类型两种方式实现需求,以下是具体实现:
方式一:分层捕获(推荐,符合Python异常处理规范)
先捕获特定的PermissionDenied异常处理日志,再用通用Exception捕获其他所有异常,确保所有错误都调用return_to_db:
try: # Initialize request argument(s) request = DeleteProjectRequest( name=project, ) self.project_manager.delete_project(request=request) except PermissionDenied as exc: # 仅PermissionDenied异常时记录日志 logger.error(f"Project '{project_id}' does not exist or permission denied", exc) # 所有异常都需要调用return_to_db return_to_db(str(exc)) return False except Exception as exc: # 处理其他所有类型的异常 return_to_db(str(exc)) return False
方式二:通用异常块内判断类型(代码更简洁)
用一个通用Exception捕获所有异常,先统一调用return_to_db,再判断异常类型是否为PermissionDenied来决定是否记录日志:
try: # Initialize request argument(s) request = DeleteProjectRequest( name=project, ) self.project_manager.delete_project(request=request) except Exception as exc: # 所有异常先调用return_to_db return_to_db(str(exc)) # 仅当是PermissionDenied异常时记录日志 if isinstance(exc, PermissionDenied): logger.error(f"Project '{project_id}' does not exist or permission denied", exc) return False
说明
- 两种方式都能满足需求:仅
PermissionDenied触发日志,所有异常都调用return_to_db。 - 方式一更符合Python异常处理的「先特定后通用」原则,逻辑更清晰;方式二减少了重复代码,适合简单场景。
内容的提问来源于stack exchange,提问作者Jasar Orion
相关产品推荐
相关产品推荐

